
Tengo un certificado OpenSSl. También necesito la clave privada. Me dijeron que está ubicado en algún lugar del servidor y, es cierto, encontré varios archivos de claves SSL.
Antes de probarlos todos por fuerza bruta: ¿Hay alguna manera de saber en la terminal si se utilizó una clave privada para crear el certificado?
Respuesta1
La referencia clásica para esto esestas preguntas frecuentesen los documentos en línea de Apache.
En ese documento, md5
se utiliza un módulo porque
Como el exponente público suele ser 65537 y es difícil comprobar visualmente que los números de módulo largo sean iguales, puede utilizar el siguiente enfoque
Esto da:
$ openssl rsa -noout -modulus -in key.pem.decrypted | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx
$ openssl x509 -noout -modulus -in crt.pem | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx
Propongo el uso de sustitución de procesos para evitar la comparación visual del módulo:
$ diff \
<(openssl x509 -noout -modulus -in cert.pem) \
<(openssl rsa -noout -modulus -in key.pem.decrypted)
Si el resultado está vacío, la clave privada coincide con el certificado.
Esta es simplemente una forma más conveniente de comparar las cadenas que la de la respuesta de Andrew Schulman, que, por supuesto, también es válida.
Otra referenciaaquí.
Respuesta2
Para comprobar que un archivo de certificado certifica la clave pública asociada con un archivo de clave privada determinado, compare las claves públicas asociadas con cada uno:
openssl rsa -in KEYFILE -pubout
openssl x509 -in CERTFILE -pubkey -noout
El certificado y la clave privada coinciden si y sólo si las claves públicas son idénticas.