Node.js 如何从nodejs中解析的x509证书中获取公钥长度

Node.js 如何从nodejs中解析的x509证书中获取公钥长度,node.js,certificate,Node.js,Certificate,x509认证的新手。使用node js和most(看起来像)工具创建和解析证书-node forge。 我正试图找出如何获得可靠的公钥长度和签名哈希算法(SHA) 超出基于证书数据创建的证书。我正在从一个.cert文件中获取一个二进制代码,并试图解析它并获取上面提到的数据。请参阅我的基本代码:(证书是表示证书的对象) 您可以使用forge公开的方便的certificateFromPem函数从certificate.pem文件中获取模数长度(n)和公钥长度 我们还可以获取签名对象Id,可以在此处查

x509认证的新手。使用node js和most(看起来像)工具创建和解析证书-node forge。 我正试图找出如何获得可靠的公钥长度和签名哈希算法(SHA) 超出基于证书数据创建的证书。我正在从一个.cert文件中获取一个二进制代码,并试图解析它并获取上面提到的数据。请参阅我的基本代码:(证书是表示证书的对象)


您可以使用forge公开的方便的certificateFromPem函数从certificate.pem文件中获取模数长度(n)和公钥长度

我们还可以获取签名对象Id,可以在此处查找:

我已经通过使用类似于so(这里是4096位密钥)的openssl创建证书对此进行了测试:


谢谢-它成功了。顺便说一句-从DER格式解析时也可以这样做。您知道指出所使用的签名哈希算法(SHA)的属性\属性是什么吗?证书具有signatureOid属性,在本例中为“1.2.840.113549.1.1.11”,这对应于SHA256withRSA(我相信)。因此必须为此编写一个查找函数,可能使用。我添加了一个getCertificateSignatureObjectId函数,该函数返回所用签名哈希算法的对象id。
let certificateContent = file.replace('-----BEGIN CERTIFICATE-----', '').replace('-----END CERTIFICATE-----', '').trim();
certificateContent = Buffer.from(certificateContent.toString(), 'binary').toString('base64').toString().split(/(.{64})/).filter(x => x).join('\r\n');
let derData = forge.util.decode64(certificateContent);
let cert = forge.pki.certificateFromAsn1(forge.asn1.fromDer(derData));
const forge = require('node-forge');
const fs = require('fs');

function getCertificatePublicKeyBitLength(pemFile) {
    const certificate = forge.pki.certificateFromPem(fs.readFileSync(pemFile));
    return certificate.publicKey.n.bitLength();
}
function getCertificateSignatureObjectId(pemFile) {
    const certificate = forge.pki.certificateFromPem(fs.readFileSync(pemFile));
    return certificate.signatureOid;
}

console.log("Bit length: ", getCertificatePublicKeyBitLength('cert.pem'));
console.log("Certificate Signature Object Id: ", getCertificateSignatureObjectId('cert.pem'));
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365