Voy a asumir que tienes ssl.crt y ssl.key en tu directorio actual.
Si desea ver lo que está en su certificado, es
# openssl x509 -in ssl.crt -text -noout
Dos de las cosas aquí serán el Módulo y el Exponente de la clave pública RSA (en hexadecimal).
Si desea ver lo que está en su clave privada es
# openssl rsa -in ssl.key -text -noout
Tenga en cuenta que la clave pública suele estar allí (como mínimo, se requiere que el módulo esté allí para que la clave privada funcione, y el exponente público suele ser 65537 o 3). Así que simplemente puedes verificar si el módulo y el exponente público coinciden. Por supuesto, si desea comprobar que la clave privada es realmente válida (es decir, d y e son exponentes RSA válidos para el módulo m), deberá ejecutar
# openssl rsa -check -in ssl.key -noout
EDITAR (2018): Tenga en cuenta que si está comprobando que una clave privada proveniente de una fuente no confiable corresponde con un certificado, DEBE COMPROBAR que la clave privada sea válida. Vea aquí para ver un ejemplo donde no se comprueba la validez de una clave privada "filtrada" para que una CA revoque incorrectamente un certificado. Puede omitir este paso si sabe que ha generado válidamente el par de llaves.
Ahora puede simplemente generar la clave pública tanto del certificado como de la clave privada y luego usar diff
para verificar que no sean diferentes:
# openssl x509 -in ssl.crt -pubkey -noout > from_crt.pub
# openssl rsa -in ssl.key -pubout > from_key.pub
# diff from_crt.pub from_key.pub
O como una línea que no crea archivos (utilizando sustitución de procesos ):
# diff <(openssl x509 -in ssl.crt -pubkey -noout) <(openssl rsa -in ssl.key -pubout)
Si las teclas coinciden, diff no debería devolver nada. (Probablemente verá una salida de "escritura de clave RSA" en stderr desde el segundo comando).
Tenga en cuenta que su servidor web probablemente se quejaría en voz alta si el certificado y la clave privada no coincidieran. Por ejemplo, con nginx usando la clave incorrecta (mismo tamaño, mismo exponente público, pero la clave del año pasado) para el certificado nginx está usando:
# sudo /etc/init.d/nginx restart
* Restarting nginx nginx
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/private/wrong_key.key") failed
(SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed