NodeJS:以 DER 格式验证证书

NodeJS: Validate certificate in DER format

我正在使用 crypto 模块来验证证书,但我的证书和 public 密钥都是 DER 格式。 crypto 模块似乎不接受这种格式。

有没有办法(或模块)使用 NodeJS 将 DER 转换为 PEM 格式?我找不到,也无法使用命令行通过 shell.

调用 openssl

更新:这与 HTTPS 证书无关。它是关于通用 X.509 证书的。如果您将问题标记为否定,请发表评论以证明其合理性。帮不上忙就别傻了。

这是一种方法:

function derToPem(der) {
 var forge = require("node-forge");
 var derKey = forge.util.decode64(der);
 var asnObj = forge.asn1.fromDer(derKey);
 var asn1Cert = forge.pki.certificateFromAsn1(asnObj);
 return forge.pki.certificateToPem(asn1Cert);
};

Dominykas 的回答很好,但就我而言,我有一个使用 ECCnode-forge[= 的证书20=] 不支持。 所以我找到了一个名为 node-openssl-wrapper 的模块,它工作得非常好,因为它将 openssl 命令封装在一个简单的函数调用中,如下所示:

co(function*() {
  var ossl = require('openssl-wrapper');
  var derCert = new Buffer('...'); // binary DER certificate
  var pemCert = yield ossl.qExec('x509', derCert, { inform: 'der', outform: 'pem' });
});

我认为 PEM 格式只是经过 base64 编码的 DER 二进制数据,分为 64 个字符行,并包裹在“-----BEGIN CERTIFICATE-----”和“---”之间--结束证书-----'。

所以你可以这样做:

var prefix = '-----BEGIN CERTIFICATE-----\n';
var postfix = '-----END CERTIFICATE-----';
var pemText = prefix + derBuffer.toString('base64').match(/.{0,64}/g).join('\n') + postfix;

不需要在后缀前加'\n',因为der buffer的最后匹配应该是空串'',所以[=的末尾会有'\n' 11=]