NodeJS:以DER格式验证证书

blz*_*lzn 2 javascript cryptography node.js der

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

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

更新:这与HTTPS证书无关。它是关于常规X.509证书的。如果您将问题标记为否定,请发表评论以证明其合理性。如果您无能为力,那就不要傻了。

Nic*_*ros 6

我认为PEM格式只是DER二进制数据,它已被base64编码,分成64个字符行,并包装在'----- BEGIN CERTIFICATE -----'和'----- END CERTIFICATE- ----'。

因此,您可以这样做:

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

您无需在后缀之前加上“ \ n”,因为der缓冲区的最后一个匹配项应该是一个空字符串”,因此在末尾将有一个“ \ n” derBuffer.toString('base64').match(/.{0,64}/g).join('\n')

  • 太棒了,这应该就是答案。适用于任何 DER 到 PEM,例如 X509 CRL (2认同)

blz*_*lzn 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' });
});
Run Code Online (Sandbox Code Playgroud)