Wie testest du ein öffentliches / privates DSA-Schlüsselpaar?

167

Gibt es eine einfache Möglichkeit, um zu überprüfen, ob ein bestimmter privater Schlüssel mit einem bestimmten öffentlichen Schlüssel übereinstimmt? Ich habe ein paar * .pub- und ein paar * .key-Dateien und muss überprüfen, welche zu welchen passen.

Auch dies sind Pub / Key-Dateien, DSA.

Ich würde wirklich einen Einzeiler bevorzugen ...

Loki
quelle

Antworten:

259

Ich habe einen Weg gefunden, der für mich besser zu funktionieren scheint:

ssh-keygen -y -f <private key file>

Dieser Befehl gibt den öffentlichen Schlüssel für den angegebenen privaten Schlüssel aus. Vergleichen Sie dann einfach die Ausgabe mit jeder * .pub-Datei.

Loki
quelle
2
Was macht das genau? Warum ssh?
Sammiwei
2
wahrscheinlich, weil er Schlüsselpaare für die SSH-Authentifizierung verwendet
etarion
2
In meinem Fall verfügt ein zentraler Arbeitsserver über ein paar Dutzend id_rsa.pub.blahhostDateien, und ich wusste nicht, welcher mit dem einzelnen id_rsaprivaten Schlüssel übereinstimmt. Ich richte passwortloses scp ein, damit ich von alten Websites migrieren kann. Das Erstellen eines neuen Schlüsselpaars ist keine Option. Ich habe meine Schlüssel gut eingerichtet und werde das nicht durcheinander bringen.
Chris K
1
Diese Lösung scheint für alle Arten von SSH-Schlüsseln zu funktionieren. Mit diesem Ansatz konnte ich sogar einen verlegten öffentlichen Schlüssel wiederherstellen.
Jari Turkia
53

Ich vergleiche immer einen MD5-Hash des Moduls mit den folgenden Befehlen:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5

Wenn die Hashes übereinstimmen, gehören diese beiden Dateien zusammen.

Robert
quelle
48

Verwenden Sie für DSA-Schlüssel

 openssl dsa -pubin -in dsa.pub -modulus -noout

um dann die öffentlichen Schlüssel zu drucken

 openssl dsa -in dsa.key -modulus -noout

Um die öffentlichen Schlüssel anzuzeigen, die einem privaten Schlüssel entsprechen, vergleichen Sie sie.

Martin v. Löwis
quelle
18

Angenommen, Sie haben die öffentlichen Schlüssel in x.509-Zertifikaten und nehmen an, dass es sich um RSA-Schlüssel handelt, dann tun Sie dies für jeden öffentlichen Schlüssel

    openssl x509 -in certfile -modulus -noout

Tun Sie dies für jeden privaten Schlüssel

    openssl rsa -in keyfile -modulus -noout

Passen Sie dann die Schlüssel nach Modul an.

Martin v. Löwis
quelle
17

Die Prüfung kann mit diff erleichtert werden:

diff <(ssh-keygen -y -f <private_key_file>) <public key file>

Das einzig Seltsame ist, dass diff nichts sagt, wenn die Dateien gleich sind. Sie werden also nur informiert, wenn öffentlich und privat nicht übereinstimmen.

John D.
quelle
3
So erhalten Sie eine Ausgabe, wenn die Dateien übereinstimmen:diff -s
Roland
3
Dies ist eine ausgezeichnete Antwort. (1) diff -qsgibt eine einfache "identische / nicht identische Antwort" zurück. (2) Sie sollten den Kommentar in der öffentlichen Schlüsseldatei löschen, bevor Sie den Diff.
Emory
7

Löschen Sie die öffentlichen Schlüssel und generieren Sie neue aus den privaten Schlüsseln. Bewahren Sie sie in separaten Verzeichnissen auf oder verwenden Sie eine Namenskonvention, um sie gerade zu halten.

Bill die Eidechse
quelle
3
Die Frage lautet, wie überprüft werden soll, und das Gerät, auf dem wir es überprüfen werden, verfügt möglicherweise nicht über die Funktionen zum Generieren eines neuen Geräts.
ArmenB
5

Geben Sie den folgenden Befehl ein, um zu überprüfen, ob ein privater Schlüssel und ein öffentlicher Schlüssel eine übereinstimmende Menge (identisch) oder keine übereinstimmende Menge (verschieden) im Verzeichnis $ USER / .ssh sind. Der Befehl cut verhindert, dass der Kommentar am Ende der Zeile im öffentlichen Schlüssel verglichen wird, sodass nur der Schlüssel verglichen werden kann.

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

Die Ausgabe sieht wie eine dieser Zeilen aus.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Ich habe ein Shell-Skript geschrieben, mit dem Benutzer die Dateiberechtigung ihrer ~ / .ssh / -Dateien und des übereinstimmenden Schlüsselsatzes überprüfen. Es löst meine Herausforderungen mit Benutzervorfällen beim Einrichten von ssh. Es kann Ihnen helfen. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Hinweis: Meine vorherige Antwort (im März 2018) funktioniert nicht mehr mit den neuesten Versionen von openssh. Vorherige Antwort: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)

Bradley Allen
quelle
Ich denke, Sie sollten näher darauf
eingehen
4

Wenn Sie unter Windows arbeiten und eine grafische Benutzeroberfläche verwenden möchten , können Sie mit puttygen Ihren privaten Schlüssel darin importieren:

Geben Sie hier die Bildbeschreibung ein

Nach dem Import können Sie den öffentlichen Schlüssel speichern und mit Ihrem vergleichen.

Zac
quelle
1

Verschlüsseln Sie etwas mit dem öffentlichen Schlüssel und sehen Sie, welcher private Schlüssel es entschlüsselt.

Dieser Code-Projektartikel von niemand anderem als Jeff Atwood implementiert einen vereinfachten Wrapper um die .NET-Kryptoklassen. Angenommen, diese Schlüssel wurden für die Verwendung mit RSA erstellt, verwenden Sie die asymmetrische Klasse mit Ihrem öffentlichen Schlüssel zum Verschlüsseln und dieselbe mit Ihrem privaten Schlüssel zum Entschlüsseln.

Mitch Wheat
quelle
Ich suche etwas Einfacheres. Sagen wir, ein Shell One Liner oder ähnliches. Ich bin unter Linux und habe die normalen Sachen wie openssl installiert.
Loki
3
Das ist fast so nützlich wie zu sagen, dass Sie Ihrer Datei "authorized_keys" einen öffentlichen Schlüssel hinzufügen und mit ssh sehen, welcher private Schlüssel funktioniert. Die Methode funktioniert, aber es ist ein Schmerz.
Bradley Kreider
0

Wenn es nichts zurückgibt, stimmen sie überein:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
RoutesMaps.com
quelle
-2

Verwenden Sie einfach puttygen und laden Sie Ihren privaten Schlüssel hinein. Bietet verschiedene Optionen, z. B. Exportieren des entsprechenden öffentlichen Schlüssels.

user2987067
quelle
1
Dies erlaubt nicht, privat-öffentliche Schlüsselpaare zu testen
MatFiz