如何在JavaScript(Angular)中获取证书的modulus以验证密钥证书匹配?
从私钥/公钥和证书中提取Modulus以验证密钥匹配(基于node-forge)
我需要从公钥和证书中提取Modulus,用来在签名前验证密钥与证书是否匹配,但一直没能实现。我正在开发Angular Web应用,使用node-forge工具包,现有代码片段如下,但不知道如何获取Modulus:
var buffer = forge.util.createBuffer(FirmaUtil.Key, 'raw'); var asn1 = forge.asn1.fromDer(buffer); var info = forge.pki.decryptPrivateKeyInfo(asn1, 'password'); var privateK = forge.pki.privateKeyFromAsn1(info);
解决方案
从私钥提取Modulus
你的代码已经成功解析出RSA私钥对象privateK,直接访问其n属性即可得到Modulus(类型为forge的BigInteger),可以转成十六进制字符串方便后续对比:
// 提取私钥Modulus并转为十六进制 const privateModulus = privateK.n.toString(16);
从公钥提取Modulus
如果是PEM格式的公钥,先解析再提取:
// 解析PEM公钥 const publicKey = forge.pki.publicKeyFromPem(publicKeyPem); // 提取公钥Modulus const publicModulus = publicKey.n.toString(16);
从证书提取Modulus
对于X.509证书,先解析证书对象,再从证书包含的公钥中提取Modulus:
// 解析PEM格式证书 const cert = forge.pki.certificateFromPem(certPem); // 提取证书中公钥的Modulus const certModulus = cert.publicKey.n.toString(16);
验证密钥与证书匹配
对比私钥、公钥、证书的Modulus字符串是否一致,即可确认匹配性:
if(privateModulus === publicModulus && publicModulus === certModulus) { console.log('密钥与证书匹配'); } else { console.log('密钥与证书不匹配'); }
内容的提问来源于stack exchange,提问作者Aetos2501
相关产品推荐
相关产品推荐

