Wie extrahiere ich einen öffentlichen Schlüssel mit OpenSSL?

120

Der folgende Befehl generiert eine Datei, die sowohl einen öffentlichen als auch einen privaten Schlüssel enthält:

openssl genrsa -des3 -out privkey.pem 2048

Quelle: hier

Bei OpenSSL enthält der private Schlüssel auch die Informationen zum öffentlichen Schlüssel, sodass ein öffentlicher Schlüssel nicht separat generiert werden muss

Wie können wir den öffentlichen Schlüssel aus der Datei privkey.pem extrahieren?

Vielen Dank.

Jake
quelle
Dieses Online-Tool ist cool 8gwifi.org/pempublic.jsp
anish

Antworten:

188
openssl rsa -in privkey.pem -pubout > key.pub

Das schreibt den öffentlichen Schlüssel zu key.pub

Stewe
quelle
22
Verwenden Sie dazu immer die interne Option: -outBeispiel: openssl rsa -in privkey.pem -pubout -out key.pubanstatt stdout in eine Datei umzuleiten.
Juan Antonio
137

Die obige Technik funktioniert zwar für den allgemeinen Fall, jedoch nicht für PEM-Dateien von Amazon Web Services (AWS).

Ich habe in den AWS-Dokumenten den folgenden Befehl gefunden: ssh-keygen -y

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html

edit Danke @makenova für die komplette Zeile:

ssh-keygen -y -f key.pem > key.pub
lababidi
quelle
38
Vielen Dank. Das ist wollen, was ich brauchte. Um die ssh-keygen -y -f key.pem > key.pub
Eingabeaufforderungen
5
Dies ist die richtige Antwortssh-keygen -y -f key.pem
Justin
1
Das bittet mich um eine Passphrase, aber ich habe keine Passphrase
eingegeben
1
@makenova Dies wird regeneriert die Schlüssel key.pem, mit dem Sie von der Protokollierung in Fälle verhindern könnte , die diesen Schlüssel benötigen!
SubmittedDenied
Wenn Sie das gleiche Problem wie bei @kavain haben, bei dem Sie nach der Passphrase gefragt werden, die Sie nicht eingegeben haben, und Sie Ihren Schlüssel mit verwenden ssh -i, stellen Sie sicher, dass Sie dort auf Ihren privaten Schlüssel
verweisen
5

Für diejenigen, die an den Details interessiert sind - Sie können sehen, was sich in der öffentlichen Schlüsseldatei befindet (wie oben erläutert generiert), indem Sie Folgendes tun: -

openssl rsa -noout -text -inform PEM -in key.pub -pubin

oder für die private Schlüsseldatei: -

openssl rsa -noout -text -in key.private

welches als Text auf der Konsole die tatsächlichen Komponenten des Schlüssels ausgibt (Modul, Exponenten, Primzahlen, ...)

cnd
quelle
2

Wenn Sie suchen, wie Sie ein Amazon AWS- .pemSchlüsselpaar in eine andere Region kopieren, gehen Sie wie folgt vor:

openssl rsa -in .ssh/amazon-aws.pem -pubout > .ssh/amazon-aws.pub

Dann

aws ec2 import-key-pair --key-name amazon-aws --public-key-material '$(cat .ssh/amazon-aws.pub)' --region us-west-2
Justin
quelle
2
Der von ausgegebene öffentliche Schlüssel opensslbefindet sich in PEM-Headern, die Sie entfernen müssen, bevor AWS CLI den Schlüssel akzeptiert.
JP
2

Für AWS, das einen vorhandenen öffentlichen Schlüssel importiert,

  1. Exportieren Sie aus dem .pem, um dies zu tun ... (unter Linux)

    openssl rsa -in ./AWSGeneratedKey.pem -pubout -out PublicKey.pub
    

Dadurch wird eine Datei erstellt, die beim Öffnen in einem Texteditor ungefähr so ​​aussieht ...

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn/8y3uYCQxSXZ58OYceG
A4uPdGHZXDYOQR11xcHTrH13jJEzdkYZG8irtyG+m3Jb6f9F8WkmTZxl+4YtkJdN
9WyrKhxq4Vbt42BthadX3Ty/pKkJ81Qn8KjxWoL+SMaCGFzRlfWsFju9Q5C7+aTj
eEKyFujH5bUTGX87nULRfg67tmtxBlT8WWWtFe2O/wedBTGGQxXMpwh4ObjLl3Qh
bfwxlBbh2N4471TyrErv04lbNecGaQqYxGrY8Ot3l2V2fXCzghAQg26Hc4dR2wyA
PPgWq78db+gU3QsePeo2Ki5sonkcyQQQlCkL35Asbv8khvk90gist4kijPnVBCuv
cwIDAQAB
-----END PUBLIC KEY-----
  1. AWS akzeptiert diese Datei jedoch NICHT.

    Sie müssen das -----BEGIN PUBLIC KEY-----und -----END PUBLIC KEY-----von der Datei entfernen. Speichern und importieren und es sollte in AWS funktionieren.

Bendo
quelle
4
und wenn Sie dieses Format konvertieren müssen, um ssh-rsa AAAAB3NzaC1y....auszuführen:ssh-keygen -f PublicKey.pub -i -mPKCS8
Rafael Milewski