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 的回答很好,但就我而言,我有一个使用 ECC 和 node-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=]
我正在使用 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 的回答很好,但就我而言,我有一个使用 ECC 和 node-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=]