miércoles, 20 de marzo de 2019

SSL: comprobar match clave pública/clave privada



Cómo comprobar si un certificado .crt hace match con una clave privada .key que tenemos.



Hace poco me pidieron generar un certificado SSL para un dominio .com, para que al acceder vía navegador mediante HTTPS a ese dominio, apareciera el certificado.

Para hacer tal cosa, empecé generando un archivo CSR y su clave privada (.key) y envié el CSR a la persona encargada de realizar los pagos en la empresa donde trabajo para que lo subiese a la entidad registradora de turno, realizase el pago y me devolviera el certificado en formato .crt.

Hasta aquí todo bien. El problema vino cuando obtuve el archivo .crt y lo quise usar en un nginx. Al hacer un reload de la configuración, nginx se quejó de que había un certificate mismatch entre la clave pública (.crt) y la clave privada (.key).

Buscando por internet, vi que la utilidad openssl dispone de una forma de verificar si los hashes de ambas claves coinciden o no. Para ello, basta con ejecutar un comando que devuelve el hash de cada uno de los archivos involucrados en un certificado y ver si coinciden entre ellos.

Empecemos por obtener el hash del archivo .crt (clave pública del certificado):

HOST:/ # openssl x509 -in cert.crt -pubkey -noout -outform pem | sha256sum 1157e76f78b0580e2a1f289552a6a45d9e7bc60bc37e57549034faaf2fb03f1z -

Del mismo modo, podemos ver el hash de la clave privada (.key):

HOST:/ # openssl pkey -in clave_privada.key -pubout -outform pem | sha256sum 1157e76f78b0580e2a1f289552a6a45d9e7bc60bc37e57549034faaf2fb03f1z -

E incluso podemos ver el hash del CSR original:

HOST:/ # openssl req -in CSR.csr -pubkey -noout -outform pem | sha256sum 1157e76f78b0580e2a1f289552a6a45d9e7bc60bc37e57549034faaf2fb03f1z -

En mi caso, el CSR y la clave privada (.key) hacían match, pero el crt tenía un hash distinto.

Para solucionar el problema, bastó con contactar con la entidad registradora y subir el CSR de nuevo. Esto generó un nuevo .crt que sí hacía match con los archivos anteriores. Subí este crt al servidor de nginx y este ya me permitió usar el certificado sin problema.


Fuentes:

https://www.sslshopper.com/certificate-key-matcher.html
0

0 comentarios:

Publicar un comentario