我正在使用crypto
模块验证证书,但我的证书和公钥都是 DER 格式。似乎crypto
模块不接受这种格式。
是否有使用NodeJS将DER转换为PEM格式的方法(或模块)?我找不到任何内容,也无法使用命令行通过shell调用 openssl 。
更新:这与HTTPS证书无关。这是关于一般的X.509证书。如果您将问题标记为否定,请发表评论以证明其合理性。如果你无法提供帮助,不要愚蠢。
答案 0 :(得分:4)
我认为PEM格式只是DER二进制数据,它已被base64编码,分成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缓冲区的最后一个匹配应该是一个空字符串'',所以在{{1}的末尾会有一个'\ n' }
答案 1 :(得分:2)
这是实现目标的一种方式:
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);
};

答案 2 :(得分:2)
Dominykas的答案很好,但就我而言,我的证书使用 ECC 而 node-forge
不支持。
所以我找到了一个名为 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' });
});