Möglicherweise gibt es keine Möglichkeit, dies nur mit den OpenSSH-Tools zu tun.
Mit den OpenSSL-Tools ist dies jedoch recht einfach möglich. Tatsächlich gibt es mindestens zwei Möglichkeiten, dies zu tun. In den folgenden Beispielen ~/.ssh/id_rsa
ist dies Ihr privater Schlüssel.
Eine Möglichkeit ist die Verwendung von dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
Der andere benutzt pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Beide schreiben eine binäre Signatur in die Standardausgabe. Wenn dgst eine -hex
Option wählt, wird eine Textdarstellung mit einigen Details zur Form der Signatur gedruckt. pkeyutl verwendet eine -hexdump
Option, die etwas weniger nützlich ist. Beide akzeptieren sowohl RSA- als auch DSA-Schlüssel. Ich habe keine Ahnung, welches Format die Ausgabe hat. Die beiden Befehle erzeugen unterschiedliche Formate. Ich habe den Eindruck, dass pkeyutl als moderner gilt als dgst .
So überprüfen Sie diese Signaturen:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
und:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Das Problem ist hier $PUBLIC_KEY_FILE
. OpenSSL kann das öffentliche Schlüsselformat von OpenSSH nicht lesen, Sie können es also nicht einfach verwenden id_rsa.pub
. Sie haben ein paar Möglichkeiten, keine ideal.
Wenn Sie eine OpenSSH-Version von 5.6 oder höher haben, können Sie dies anscheinend tun:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Damit wird der öffentliche Schlüssel in die Standardausgabe im PEM-Format geschrieben, die OpenSSL lesen kann.
Wenn Sie den privaten Schlüssel haben und es sich um einen RSA-Schlüssel handelt, können Sie den öffentlichen Schlüssel daraus extrahieren (ich gehe davon aus, dass die PEM-codierte private Schlüsseldatei eine Kopie des öffentlichen Schlüssels enthält, da es nicht möglich ist, den öffentlichen Schlüssel abzuleiten vom privaten Schlüssel selbst), und verwenden Sie Folgendes:
openssl rsa -in ~/.ssh/id_rsa -pubout
Ich weiß nicht, ob es ein DSA-Äquivalent gibt. Beachten Sie, dass dieser Ansatz eine gewisse Zusammenarbeit des Besitzers des privaten Schlüssels erfordert, der den öffentlichen Schlüssel extrahieren und an den potenziellen Prüfer senden muss.
Zuletzt können Sie ein Python-Programm verwenden, das von einem Jungen namens Lars geschrieben wurde , um den öffentlichen Schlüssel von OpenSSH in das OpenSSL-Format zu konvertieren.