Saltar al contenido

Uso de node.js para verificar un certificado X509 con certificado CA

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 #TODOs, 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

Comentarios y calificaciones del artículo

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *