在 nodeJS 中解析 X509 证书包

Parsing X509 Certificate Bundles in nodeJS

我正在尝试解析一个 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();

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

谢谢。

您可以匹配开始证书部分,然后使用否定先行 (?!-----) 捕获匹配所有不以 ----- 开头的行的组,然后匹配结束证书部分。

^-----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]);
}