Wie konvertiere ich einen privaten Schlüssel in einen privaten RSA-Schlüssel?

97

Lassen Sie mich zuerst meine Frage erklären. Ich habe ein Zertifikat von einer Zertifizierungsstelle gekauft und das folgende Format verwendet, um die CSR und den privaten Schlüssel zu generieren:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

Wenn ich die Datei server.key öffne, sehe ich, dass sie mit "----- BEGIN PRIVATE KEY -----" beginnt.

Ich verwende das SSL-Zertifikat auf meinem Server und alles sieht gut aus.

Jetzt möchte ich dasselbe Zertifikat in AWS IAM hochladen, damit ich es für Beanstalk Load Balancer verwenden kann. Ich verwende den folgenden Befehl aus diesem aws-Dokument: http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SubmitCSRCertAuth

iam-servercertupload -b public_key_certificate_file  -k privatekey.pem -s certificate_object_name

Ich ändere die Namen der Zertifizierungsdateien nach Bedarf, erhalte jedoch weiterhin die folgende Fehlermeldung: "400 MalformedCertificate Invalid Private Key".

Das Interessante ist, dass auf der aws-Dokumentseite der angezeigte private Beispielschlüssel mit "------- RSA Private Key beginnen --------" beginnt.

Gibt es eine Möglichkeit, meinen privaten Schlüssel mit openssl in einen privaten RSA-Schlüssel umzuwandeln?

Stiller Benutzer
quelle

Antworten:

154

Neuere Versionen von OpenSSL sagen, BEGIN PRIVATE KEYweil sie den privaten Schlüssel + eine OID enthalten, die den Schlüsseltyp identifiziert (dies wird als PKCS8-Format bezeichnet). So erhalten Sie den alten Stilschlüssel (entweder als PKCS1- oder traditionelles OpenSSL-Format bezeichnet):

openssl rsa -in server.key -out server_new.key

Alternativ, wenn Sie einen PKCS1-Schlüssel haben und PKCS8 möchten:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem
Paul Kehrer
quelle
1
Dies ist auch die Lösung, um seltsame Fehlermeldungen wie Invalid PEM structure, '-----BEGIN...' missing.von Tools wie Cyberduck zu erhalten, während reines SSH mit demselben Schlüssel funktioniert.
Daniel
1
Danke dir! Ich habe es A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.auf meinem privaten Schlüssel bekommen und ausgeführt, um es zu beheben!
Philfreo
4
Weitere Informationen finden Sie unter stackoverflow.com/q/20065304/53974 .
Blaisorblade
1
Wie machen wir das Gegenteil davon? Ich brauche ein Private Keyvon einem RSA Private Key?
3.
1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemwird eine PKCS8 an STDOUT schreiben
Paul Kehrer
24

Dies kann hilfreich sein (schreiben Sie die Backslashes '\' in den Befehlen nicht buchstäblich aus, sie sollen anzeigen, dass "alles in einer Zeile stehen muss"):

Welcher Befehl wann anzuwenden ist?

Es scheint, dass alle Befehle (in grau) jede Art von Schlüsseldatei (in grün) als "in" -Argument verwenden. Was nett ist.

Hier sind noch einmal die Befehle zum einfacheren Einfügen:

openssl rsa                                                -in $FF -out $TF
openssl rsa -aes256                                        -in $FF -out $TF
openssl pkcs8 -topk8 -nocrypt                              -in $FF -out $TF
openssl pkcs8 -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA256 -in $FF -out $TF

und

openssl rsa -check -in $FF
openssl rsa -text  -in $FF
David Tonhofer
quelle
1
Die "graphml" -Datei des Bildes (die zum Beispiel mit yworks yed bearbeitet werden kann) finden Sie hier
David Tonhofer
8

So konvertieren Sie "BEGIN OPENSSH PRIVATE KEY" in "BEGIN RSA PRIVATE KEY"

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
Ahirapara
quelle
Genau das brauchte ich. Vielen Dank!
RossD
Dieses Verhalten wird indirekt auf der Manpage ssh-keygen dokumentiert, aber die Verwendung des Flags -m wird für andere Betriebsmodi als -i und -o
ikrabbe