NodeJS:以DER格式验证证书

时间:2015-08-13 15:44:05

标签: javascript node.js cryptography der

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

是否有使用NodeJS将DER转换为PEM格式的方法(或模块)?我找不到任何内容,也无法使用命令行通过shell调用 openssl

更新:这与HTTPS证书无关。这是关于一般的X.509证书。如果您将问题标记为否定,请发表评论以证明其合理性。如果你无法提供帮助,不要愚蠢。

3 个答案:

答案 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' });
});