NodeJS загружает сертификат PFX из файла

Я пишу небольшой проект, используя Node.JS и TypeScript, одним из требований является чтение сертификата PFX из файла .pfx и использование его в коде для шифрования тела полезной нагрузки.

У меня есть файл открытого/закрытого ключа сертификата с именем cert1.pfx, для моего кода требуется этот сертификат, как показано ниже.

...
const cert = loadPfx("cert1.pfx");
const p: Payload = new Payload();
p.addReaderCertificate(cert);
...

Я искал, но не могу найти способ загрузить PFX для моего варианта использования, я видел примеры загрузки PFX для HTTPS-сервера или Express.JS, я посмотрел node-x509, но это для сертификатов CER или PEM в кодировке BASE64. , я также посмотрел на node-rsa, но это для шифрования/дешифрования с использованием открытых/закрытых ключей.

Кто-нибудь знает возможно ли это? Если да, то были бы признательны за некоторые указания о том, как это сделать.


person Neil Stevens    schedule 12.03.2017    source источник


Ответы (3)


Итак, после МНОГО исследований и поиска в архивах Google я наткнулся на пакет под названием pem, и он имеет следующее метод:

pem.readPkcs12(bufferOrPath, [options], callback)

Это может читать файл PKCS # 12 (или, другими словами, файл *.pfx или *.p12) среди прочего, я, должно быть, пропустил это в своих предыдущих исследованиях.

Применение:

const pem = require("pem");
const fs = require("fs");

const pfx = fs.readFileSync(__dirname + "/test.pfx");
pem.readPkcs12(pfx, { p12Password: "password" }, (err, cert) => {
    console.log(cert);
});

Выход:

{ cert: "...", ca: ["subca", "rootca"], key: "..." }

Вы можете найти больше здесь и здесь.

person Neil Stevens    schedule 19.03.2017
comment
Я не вижу никакого вывода в моей консоли - person Anand; 10.05.2019

Похоже, вам нужно использовать только собственные возможности https Node. Node может напрямую читать PFX-файл. (Https.createServer, Параметры SSL)

Пример с сайта Node.js:

const https = require('https');
const fs = require('fs');

const options = {
  pfx: fs.readFileSync('test/fixtures/test_cert.pfx'),
  passphrase: 'sample'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(8000);
person Constablebrew    schedule 19.08.2019

Я также застрял на аналогичной проблеме. Решение @neil-stevens помогло мне прочитать файл .pfx, но я обнаружил одну особенность/ошибку (я точно не знаю, что это такое) pem, которая в основном возвращает зашифрованный закрытый ключ в RSA, но если вам нужен фактический закрытый ключ, вам нужно экспортировать зашифрованный ключ в pkcs8, что можно сделать с помощью Узел RSA.

Использование:

const RSAKey = cert.key; const key = new NodeRSA(RSAKey); const privateKey = key.exportKey("pkcs8");

person mondyfy    schedule 30.08.2019