首页 > 解决方案 > node-forge 库 crl 分发列表不正确

问题描述

我正在使用 node-forge 库在 nodejs 中尝试以下代码。

const cert = fs.readFileSync("test.cer")
const cCert = pki.certificateFromPem(cert)

const basicConstraints= cCert.extensions.find(item => item.name === 'basicConstraints')
console.log(basicConstraints.value);

输出是:

0z0$\u0006\b+\u0006\u0001\u0005\u0005\u00070\u0001\u0018http://ocsp.digicert.com0R\u0006\b+\u0006\u0001\u0005\u0005\u00070\u0002Fhttp://...digiCA.crt

我怎样才能转换成正确的价值?

标签: node.js

解决方案


您可以使用解析扩展值asn1.fromDer并遍历树以收集 CRL 分发点:

const pki = require('node-forge').pki;
const asn1 = require('node-forge').asn1;
const fs = require('fs');

const cert = fs.readFileSync("test.cer");
const cCert = pki.certificateFromPem(cert);

const distributionPoints = [];
const getDistributionPoints = (node) => {
  if (typeof node === 'string') {
    distributionPoints.push(node);
    return;
  }
  if (Array.isArray(node)) {
    node.forEach(getDistributionPoints);
    return;
  }
  if (node && typeof node === 'object') {
    getDistributionPoints(node.value)
  }
}

const ext = cCert.getExtension('cRLDistributionPoints');
getDistributionPoints(asn1.fromDer(ext.value))

console.log(distributionPoints);

推荐阅读