Парсинг сертификатов X509 в nodeJS - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь проанализировать комплект сертификатов x509, который является файлом pem, состоящим из нескольких сертификатов, в следующем формате:

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

Я могу прочитать и проанализировать один файл pem сертификата с помощью jsrsasign X509 библиотека вот так:

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

Мне нужно разобрать комплекты сертификатов аналогичным образом. Как мне это сделать ? Я использую Nodejs. Я пытался использовать регулярные выражения для извлечения отдельных сертификатов в виде строк и передачи его в cert.readCertPEM (входной) в al oop. Но я не смог понять, как правильно сделать RE. Если использование RE - это способ go, то могу я узнать, как я могу это сделать.

Спасибо.

1 Ответ

0 голосов
/ 15 января 2020

Можно сопоставить начальную часть сертификата, а затем захватить группу, соответствующую всем строкам, которые не начинаются с -----, с использованием отрицательного предвзятого отношения (?!-----), а после этого соответствовать конечной части сертификата.

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