Ich habe ein Problem beim Generieren eines öffentlichen Schlüssels, den die openssl- PEM_read_bio_RSA_PUBKEY()
Funktion verwenden kann. Ich bekomme immer wieder Fehler.
Offensichtlich kann ich die ASCII-Zeichenfolge in der ssh-keygen <>.pub
Schlüsseldatei nicht einfach verwenden, da sie im SSH-Dateiformat vorliegt oder ich sie möglicherweise SubjectPublicKeyInfo
strukturiere.
Hier ist der Schlüsselcode: ssh-keygen -t rsa -b 1024 -C "Test Key"
Ich habe einen Konverter in PHP im Web gefunden, der den Inhalt des öffentlichen Schlüssels in ein Base64-PEM-ASCII-Zeichenfolgenformat konvertiert. Allerdings gefällt es der Funktion immer noch nicht.
In der Openssl-Dokumentation heißt es:
- "RSA_PUBKEY () - Funktion, die einen öffentlichen Schlüssel unter Verwendung einer EVP_PKEY-Struktur verarbeitet"
- „RSA_PUBKEY-Funktionen verarbeiten auch einen öffentlichen RSA-Schlüssel mithilfe einer RSA-Struktur“
Wie kann ich meinen öffentlichen OpenSSH-Schlüssel in ein Format bringen, das von der OpenSSL-Funktion verwendet wird?
Antworten:
OKAY!
Also ging ich zu dem Gedanken über: "Einfach, ich habe das verstanden." Es hat sich herausgestellt, dass viel mehr dahinter steckt, als ich dachte.
Das erste Problem ist, dass OpenSSL (gemäß den Manpages für OpenSSL (man 3 pem)) erwartet, dass der RSA-Schlüssel im PKCS # 1-Format vorliegt. Offensichtlich arbeitet ssh-keygen nicht damit. Sie haben zwei Möglichkeiten (von der Suche um).
Wenn Sie OpenSSH v. 5.6 oder neuer haben (ich habe es nicht auf meinem Laptop getan), können Sie dies ausführen:
Die längere Methode besteht darin, Ihren SSH-Schlüssel in verschiedene Komponenten aufzuteilen (der Blogeintrag, den ich in OpenSSH als "proprietär" bezeichnete, ich nenne ihn lieber "einzigartig") und dann eine ASN1-Bibliothek zu verwenden Dinge tauschen.
Zum Glück hat jemand den Code dazu geschrieben:
https://gist.github.com/1024558
quelle
ssh-keygen
Methode scheint zu funktionieren auf Linux , aber nicht Mac OS Xssh -V
.OpenSSH_6.2p2
. Funktioniert inOpenSSH_6.6p1
.-m
funktioniert bei mir nicht ... wie sieht die arbeit aus?Angenommen, Sie haben den privaten SSH-Schlüssel
id_rsa
, dann können Sie den öffentlichen Schlüssel folgendermaßen daraus extrahieren:Mir ist klar, dass das OP nach der Konvertierung eines öffentlichen Schlüssels gefragt hat, daher ist die Frage hier nicht ganz beantwortet, aber ich dachte, es wäre für einige trotzdem nützlich.
Beachten Sie auch, dass dieser Befehl zu einem PEM-Public-Key-Format führt, das OpenSSL im Allgemeinen erwartet. Die Antwort von Brian führt andererseits zu einer Datei im RSAPublicKey-Format, das nicht das von OpenSSL erwartete normale Format ist (obwohl spätere Versionen es anscheinend über das
-RSAPublicKey_in
Flag lesen können ). So konvertieren Sie:quelle
openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pem
funktioniert auch (dh die Eingabe ist ein privater Schlüssel im PEM-Format). Gute Antwort.-m pkcs8
die trotz OpenSSH Leute den falschen Namen verwenden tut produzieren X.509 ‚pubkey‘. Seit OpenSSH 6.5 im Jahr 2014-01 funktioniert-o
diese Methode nicht mehr, wenn der Ersteller "neues Format" für eine bessere Sicherheit angegeben hat. Seit 7.8 im Jahr 2018-08 ist "neues Format" nun ebenfalls die Standardeinstellung.Das Format, das Sie wollen,
ssh-keygen
nennt manPKCS8
. Der folgende Befehl erzeugt also die gewünschte Ausgabe:Von der
ssh-keygen
Manpage:quelle
Ähnlich wie die Methode von Amal Chaudhuri unten hat dies bei mir funktioniert. Ich musste eine PEM-Datei aus dem öffentlichen SSH-Schlüssel erstellen, den ich für meinen SFTP-Client (Cyberduck) generiert hatte.
quelle
id_rsa
bereits das richtige Format vor, Sie können es selbst überprüfen, das Ergebnisid_rsa.pem
ist zu 100% identisch.Eine andere Möglichkeit, dies von einer anderen Site aus zu tun. Posting dies für den Fall, dass Sie eine andere Methode benötigen. Funktioniert sehr gut http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html
quelle
id_rsa
ist kein öffentlicher Schlüssel. Falsche Antwort.