const rs = require('jsrsasign'); // 用户提供的 SM2 PKCS7 签名数据(没有头尾) const sm2P7Base64 = 'MIIDKgYKKoEcz1UGAQQCAqCCAxowggMWAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICNzCCAjMwggHWoAMCAQICBgD1tfRoKTAMBggqgRzPVQGDdQUAMEAxCzAJBgNVBAYTAkNOMQ8wDQYDVQQKDAZQQkNDUkMxIDAeBgNVBAMMF1BCQ0NSQyBTTTIgT3BlcmF0aW9uIENBMB4XDTI2MDQwMjA4MDEzOVoXDTM2MDMzMDA4MDEzOVowTTELMAkGA1UEBhMCQ04xDzANBgNVBAoMBlBCQ0NSQzEtMCsGA1UEAwwkOTRmMWY5MzgtZjBiZC00NzYyLTkyOGUtZjY4YTdjY2UxNDFkMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEu3dU5Vn20VjVL9xGCCRPB/EpATY6HW24+zIZv46Cfv0R2PGM+ZJs/dYarw7qJCnpIbe5T0PKmyyJITNVrVnnMaOBrDCBqTAfBgNVHSMEGDAWgBRUqfVQHMpD+o+YdrPK1JlRJL757zAJBgNVHRMEAjAAME8GA1UdHwRIMEYwRKBCoECkPjA8MQ4wDAYDVQQDDAVjcmw3MTEMMAoGA1UECwwDY3JsMQ8wDQYDVQQKDAZQQkNDUkMxCzAJBgNVBAYTAkNOMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQU5bG6U0lYzWtkPJE74M/3HdafKKcwDAYIKoEcz1UBg3UFAANJADBGAiEAuLTE36/Eobcui23bFiPvOU4MOT0O0r9SyyHZ1JuvLwMCIQCejuSk03jyUAkbh1SaPx5n7WlDjI6tx9v9RJ7iw5rlojGBtzCBtAIBATBKMEAxCzAJBgNVBAYTAkNOMQ8wDQYDVQQKDAZQQkNDUkMxIDAeBgNVBAMMF1BCQ0NSQyBTTTIgT3BlcmF0aW9uIENBAgYA9bX0aCkwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARGMEQCIALTgWMD7io1JHfzInBwzDQpe9bonchuLFSED//JLDtnAiBmEUtr+ssAQIzFG4wY0CAj9QZxhENyCU2UYL1fhaysUA=='; const parser = new rs.KJUR.asn1.cms.CMSParser(); const p7 = parser.getCMSSignedData(rs.b64tohex(sm2P7Base64)); console.log('=== 调试 SM2 证书提取 ==='); console.log('p7 keys:', Object.keys(p7)); console.log('p7.certs:', p7.certs); console.log('p7.sinfos:', p7.sinfos); // 尝试直接解析证书 console.log('\n=== 直接解析证书 ==='); try { // 从 hex 中提取证书 const hex = rs.b64tohex(sm2P7Base64); console.log('hex length:', hex.length); // 使用 ASN1HEX 解析 const hCert = rs.ASN1HEX.getTLVbyList(hex, 0, [0, 3, 0, 0]); console.log('hCert:', hCert ? hCert.substring(0, 50) + '...' : 'null'); if (hCert) { const certPem = rs.KJUR.asn1.ASN1Util.getPEMStringFromHex(hCert, 'CERTIFICATE'); console.log('certPem:', certPem.substring(0, 200)); const x509 = new rs.X509(); x509.readCertPEM(certPem); console.log('\n主题:', x509.getSubjectString()); console.log('颁发者:', x509.getIssuerString()); } } catch (e) { console.error('错误:', e.message); }