Wie kann man herausfinden, ob ein OpenSSL-Zertifikat von einem bestimmten privaten Schlüssel erstellt wurde?

7

Ich habe ein OpenSSl-Zertifikat. Ich brauche auch den privaten Schlüssel. Mir wurde gesagt, dass es sich irgendwo auf dem Server befindet, und tatsächlich habe ich mehrere SSL-Schlüsseldateien gefunden.

Bevor ich sie alle mit brutaler Gewalt ausprobiere: Kann ich auf dem Terminal herausfinden, ob zum Erstellen des Zertifikats ein privater Schlüssel verwendet wurde?

k0pernikus
quelle

Antworten:

9

Die klassische Referenz hierfür ist diese FAQ in den Online-Apache-Dokumenten.

In diesem Dokument wird ein md5Modul verwendet, weil

Da der öffentliche Exponent normalerweise 65537 ist und es schwierig ist, visuell zu überprüfen, ob die langen Modulzahlen gleich sind, können Sie den folgenden Ansatz verwenden

Das gibt:

$ openssl rsa -noout -modulus -in key.pem.decrypted | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

$ openssl x509 -noout -modulus -in crt.pem | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

Ich schlage die Verwendung der Prozesssubstitution vor, um einen visuellen Vergleich des Moduls zu vermeiden:

$ diff \ 
    <(openssl x509 -noout -modulus -in cert.pem) \
    <(openssl rsa -noout -modulus -in key.pem.decrypted)

Wenn die Ausgabe leer ist, stimmt der private Schlüssel mit dem Zertifikat überein.

Dies ist nur eine bequemere Möglichkeit, die Zeichenfolgen zu vergleichen, als die in Andrew Schulmans Antwort, die natürlich auch gültig ist.

Eine weitere Referenz hier .

dawud
quelle
Wollen Sie damit sagen, dass der Vergleich des Pub-Schlüssels nicht ausreicht, oder ist es nur eine bequemere Möglichkeit, das Zertifikat und den Schlüssel zu vergleichen?
k0pernikus
Meinen Sie mit " Vergleich des Pub-Schlüssels " nur den Vergleich der beiden Schlüssel selbst?
MadHatter
1
Der Modul ist der wichtige Teil des öffentlichen Schlüssels. Wenn Sie also nur den Modul vergleichen, erhalten Sie das gleiche Ergebnis wie beim Vergleich des gesamten öffentlichen Schlüssels.
Kasperd
7

Um zu überprüfen, ob eine Zertifikatdatei den öffentlichen Schlüssel zertifiziert, der einer bestimmten privaten Schlüsseldatei zugeordnet ist, vergleichen Sie die öffentlichen Schlüssel, die jedem zugeordnet sind:

openssl rsa -in KEYFILE -pubout
openssl x509 -in CERTFILE -pubkey -noout

Das Zertifikat und der private Schlüssel stimmen genau dann überein, wenn die öffentlichen Schlüssel identisch sind.

Andrew Schulman
quelle