Hola, hemos encontrado la respuesta a lo que buscas, has scroll y la verás un poco más abajo.
Solución:
Finalmente logré hacerlo usando node-forge
. Aquí hay un ejemplo de código de trabajo:
let pki = require('node-forge').pki;
let fs = require('fs');
let caCert;
let caStore;
try
caCert = fs.readFileSync('path/to/ca-cert.pem').toString();
caStore = pki.createCaStore([ caCert ]);
catch (e)
log.error('Failed to load CA certificate (' + e + ')');
return....;
try
pki.verifyCertificateChain(caStore, [ cert ]);
catch (e)
return handleResponse(new Error('Failed to verify certificate (' + e.message
Ambos certificados se otorgarán en formato PEM codificado en base64/js string.
verifyCertificateChain
comprueba la validez del certificado (notBefore
/notAfter
) así como también verifica la cadena CA dada.
No estoy 100% seguro si este es el mejor enfoque, o si esta biblioteca está haciendo un buen trabajo, ya que su código fuente de verifyCertificateChain
está lleno de #TODO
s, entonces, ¿tal vez esto no está listo para la producción? Pero al menos tengo una solución algo funcional. Probablemente sería mejor crear un módulo de nodo que envuelva el libssl
c llama, pero eso es solo mucho esfuerzo para esta pequeña tarea.
También puede hacer esto si desea verificar el uso de los certificados de cliente de la solicitud http directamente:
// retrieve certificates from the request ( in der format )
clientCert = req.connection.getPeerCertificate(true).raw.toString('base64'))
Método para convertir el certificado der a pem y verificar contra el castor.
const caCert = fs....
const ca = pki.certificateFromPem(caCert)
const caStore = pki.createCaStore([ ca ])
const verify = (clientCert, next) =>
try
const derKey = forge.util.decode64(clientCert)
const asnObj = forge.asn1.fromDer(derKey)
const asn1Cert = pki.certificateFromAsn1(asnObj)
const pemCert = pki.certificateToPem(asn1Cert)
const client = pki.certificateFromPem(pemCert)
return pki.verifyCertificateChain(caStore, [ client ], cb)
catch (err)
next(new Error(err))
No encontré una mejor manera de verificar el certificado “der” del cliente desde el request
.
fas3r