node.js - NodeJS cargar certificado PFX desde archivo
Estoy escribiendo un pequeño proyecto usando Node.JS y TypeScript, uno de los requisitos es leer un certificado PFX desde un archivo .pfx y usarlo en el código para cifrar el cuerpo de la carga útil
Tengo un archivo de certificado de clave pública/privada llamado cert1.pfx, mi código requiere este certificado como se muestra a continuación
...
const cert = loadPfx("cert1.pfx");
const p: Payload = new Payload();
p.addReaderCertificate(cert);
...
He buscado por todas partes pero no puedo encontrar una manera de cargar el PFX para mi caso de uso, he visto ejemplos de carga de un PFX para un servidor HTTPS o Express.JS, miré node-x509 pero eso es para certificados CER o PEM codificados en BASE64, también miré node-rsa pero eso es para cifrar/descifrar usando claves públicas/privadas.
¿Alguien sabe si esto es posible? Si es así, agradecería algunos consejos sobre cómo lograrlo.
Respuesta #1
Entonces, después de MUCHAS investigaciones y de buscar en los archivos de Google, me encontré con un paquete llamado pem y este tiene el siguiente método:
pem.readPkcs12(bufferOrPath, [options], callback)
Esto puede leer un archivo PKCS#12 (o dicho de otra manera un archivo *.pfx o *.p12), entre otras cosas, debo haber pasado por alto esto en mi investigación anterior.
Uso :
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);
});
Salida :
{ cert: "...", ca: ["subca", "rootca"], key: "..." }
Puedes encontrar más aquí y aquí.
Respuesta #2
Parece que solo necesitas usar las propias capacidades de https de Node. Node puede leer el archivo PFX directamente. (Https.createServer, Opciones SSL)
Ejemplo del sitio de 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);
