NodeJS – получить цепочку сертификатов из файла P7B

Я пытаюсь взять строку в кодировке CMS base64, преобразовать ее в файл pkcs7 и извлечь листовые и промежуточные сертификаты с помощью javascript/nodejs, аналогично следующей команде openssl:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

Я читал почти все статьи и видел решения на других языках, но не для node. Я понимаю, что вы можете добиться того, что мне нужно, используя node-forge, но node-forge не поддерживает алгоритмы ECC. Кто-нибудь знает какие-либо другие решения/пакеты npm, которые могут помочь мне в этом? Помогите пожалуйста мне. Я очень новичок в этом.


person Community    schedule 09.04.2019    source источник


Ответы (1)


Вы видели PKI.js для Node.js? Это чистая библиотека JavaScript, реализующая форматы, используемые в приложениях PKI. Он основан на API веб-криптографии W3C с полной поддержкой всех алгоритмов "Suite B". в сообщениях CMS. Фрагмент кода, представленный OP:

const cmsSignedBuffer = stringToArrayBuffer(fromBase64(token.signature)); 
const asn1 = asn1js.fromBER(cmsSignedBuffer); 
const cmsContentSimpl = new pkijs.ContentInfo({ schema: asn1.result }); 
const cmsSignedSimpl = new pkijs.SignedData({ schema: cmsContentSimpl.content })

Другой подход заключается в использовании оболочки для openssl, такой как, например, openssl-nodejs. Оболочка просто порождает дочерний процесс для вызова openssl. Таким образом, openssl должен быть установлен в системе, где развернуто приложение Node.js.

person Marcus    schedule 09.04.2019
comment
Большое спасибо, PKI.js сделал именно то, что я ищу. Для всех, кто сталкивается с этой проблемой, я просто сделал const cmsSignedBuffer = stringToArrayBuffer(fromBase64(token.signature)); const asn1 = asn1js.fromBER(cmsSignedBuffer); const cmsContentSimpl = new pkijs.ContentInfo({ schema: asn1.result }); const cmsSignedSimpl = new pkijs.SignedData({ schema: cmsContentSimpl.content }); Затем cmsSignedSimpl содержал сертификаты, которые я искал. - person ; 09.04.2019
comment
Превосходно. Я добавил ваш фрагмент в текст ответа. Пожалуйста, рассмотрите возможность принятия ответа. - person Marcus; 10.04.2019