Suppongo che tu abbia ssl.crt e ssl.key nella tua directory corrente.
Se vuoi vedere cosa c'è nel tuo certificato è
# openssl x509 -in ssl.crt -text -noout
Due delle cose qui dentro saranno il modulo e l'esponente della chiave pubblica della RSA (in hex).
Se vuoi vedere cosa c'è nella tua chiave privata è
# openssl rsa -in ssl.key -text -noout
Si noti che la chiave pubblica è di solito lì (per lo meno è necessario che il modulo sia lì per far funzionare la chiave privata, e l'esponente pubblico è in genere 65537 o 3). Quindi puoi semplicemente verificare se il modulo e l'esponente pubblico corrispondono. Certo, se vuoi verificare che la chiave privata sia effettivamente valida (cioè d ed e sono esponenti RSA validi per il modulo m), dovresti eseguire
# openssl rsa -check -in ssl.key -noout
EDIT (2018): Si noti che se si verifica che una chiave privata proveniente da una fonte non affidabile corrisponda a un certificato, è necessario VERIFICARE che la chiave privata sia valida. Vedi qui per un esempio in cui non controllare la validità di una chiave privata "trapelata" porta a una CA che revoca un certificato in modo improprio. Puoi saltare questo passaggio se sai di aver generato validamente la coppia di chiavi.
Ora puoi semplicemente generare la chiave pubblica sia dal certificato che dalla chiave privata e quindi utilizzare diff
per verificare che non differiscano:
# 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 come un unico rivestimento che non crea file (usando sostituzione del processo ):
# diff <(openssl x509 -in ssl.crt -pubkey -noout) <(openssl rsa -in ssl.key -pubout)
Se i tasti corrispondono, diff non dovrebbe restituire nulla. (Probabilmente vedrai "scrivere la chiave RSA" in output su stderr dal secondo comando).
Nota che il tuo server web probabilmente si lamenterebbe rumorosamente se il certificato e la chiave privata non corrispondessero. Ad esempio, con nginx che utilizza la chiave errata (stessa dimensione, stesso esponente pubblico, ma la chiave dell'anno scorso) per il certificato nginx sta 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