【问题标题】:Parsing X509 Certificate Bundles in nodeJS在 nodeJS 中解析 X509 证书包
【发布时间】:2020-01-14 14:19:09
【问题描述】:

我正在尝试解析 x509 证书包,它是一个 pem 文件,由以下格式的多个证书组成:

   -----BEGIN CERTIFICATE-----
   xxxx
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
    xxxx
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   xxxx
   -----END CERTIFICATE-----

我可以使用 jsrsasign X509 库读取和解析单个证书 pem 文件,如下所示:

    import r from "jsrsasign";
      const cert = new r.X509();
      cert.readCertPEM(input);
      issuer = cert.getIssuerString();

我需要以类似的方式解析证书包。我该怎么做 ?我正在使用 Node.js。 我尝试使用正则表达式将单个证书提取为字符串,并在循环中将其传递给 cert.readCertPEM(input)。但我无法找出合适的 RE 这样做。 如果使用 RE 是要走的路,那么我能知道我该怎么做吗?

谢谢。

【问题讨论】:

  • input.split('-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----')?

标签: node.js regex parsing x509


【解决方案1】:

您可以匹配开始证书部分,然后使用负前瞻(?!-----) 匹配所有不以----- 开头的行,然后匹配结束证书部分。

^-----BEGIN CERTIFICATE-----\r?\n((?:(?!-----).*\r?\n)*)-----END CERTIFICATE-----

Regex demo

const regex = /^-----BEGIN CERTIFICATE-----\r?\n((?:(?!-----).*\r?\n)*)-----END CERTIFICATE-----/gm;
const str = `-----BEGIN CERTIFICATE-----
xxxx
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
xxxx
xxxx
xxxx
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
xxxx
-----END CERTIFICATE-----`;
let m;

while ((m = regex.exec(str)) !== null) {
  // This is necessary to avoid infinite loops with zero-width matches
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }

  console.log(m[1]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多