Privater Schlüssel kann nicht geladen werden. (PEM-Routinen: PEM_read_bio: keine Startzeile: pem_lib.c: 648: Erwarten: JEDER PRIVATE SCHLÜSSEL)

90

Ich habe eine .key-Datei, die eine PEM-formatierte private Schlüsseldatei ist. Ich habe diese Datei nicht erstellt, aber ich habe sie von irgendwoher bekommen.

Ich wollte seinen MD5-Hash mit dem openssl-Tool wie dem folgenden Befehl sehen.

openssl rsa -in server.key -modulus -noout

Dies erzeugt jedoch unten Fehler.

unable to load Private Key
13440:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:648:Expecting: ANY PRIVATE KEY

Hier ist ein Teil der .key-Datei.

openssl asn1parse -in server.key
0:d=0  hl=4 l= 603 cons: SEQUENCE
4:d=1  hl=2 l=   1 prim: INTEGER           :00
7:d=1  hl=3 l= 129 prim: INTEGER           :C141201603899993919CBAA56985E9C7
C6A2AF713A02F5FE88D38CEFBED9304599689280B84B0AB577A9719CA20DDA1246A894AF397A2C57
EE5A582B036CC367E3667454DCD82DBDBF187C35FE39F61C71B517DDDF576F5471B4EC2E045E0F9D
619F5616C4E832F00CBD0DBF41B4BA3CBC4B4B603AE1FE61965917DA732E0DEF
139:d=1  hl=2 l=   3 prim: INTEGER           :010001
144:d=1  hl=3 l= 128 prim: INTEGER           :1687B9AE67562CEDEBDD7A531B84CDB7
093CE138519B93C34B7F626076FF0A262B16EA71904ACB6251A39307C04ADE202055BA13DD9F1539
6123EE408183361A9BC08B9413FA360EA928E48CC3F52B33ACF2980758F02BA2139F652F30A257C2
2E45D7C25835FC4D22B9ECECC12AB632318D4F47E1EBDAD9781B96BCFF03A2D1

 ...

Kann ich noch etwas ausprobieren?

tkpl
quelle
2
Was ist die genaue Kopf- / Fußzeile der PEM-Datei? Sie können diesen Fehler erhalten, wenn Sie einen öffentlichen Schlüssel senden. Außerdem gibt der von Ihnen aufgelistete Befehl keinen MD5-Hash aus. Es gibt den Modul des Schlüssels.
Gtrig
Ich hatte scpdie Datei von Windows nach Ubuntu kopiert. Um dies zu beheben, habe ich die Datei unter Ubuntu gelöscht, dort eine neue leere Datei erstellt und vimden richtigen Inhalt verwendet und dann eingefügt.
Ryan

Antworten:

62

Öffnen Sie die Schlüsseldatei in Notepad ++ und überprüfen Sie die Codierung. Wenn UTF-8-BOM angezeigt wird, ändern Sie es in UTF-8. Speichern Sie die Datei und versuchen Sie es erneut.

Robert L.
quelle
2
Was ist, wenn ich einen Mac benutze?
Ernest Zamelczyk
6
Verwenden Sie Visual Studio Code - Sie können die Codierung einfach über die untere Symbolleiste ändern!
Luca Ghersi
2
Oh mein guter Gott! VIELEN DANK! Ich hätte das nie durch Ausprobieren herausgefunden, das Problem für mich behoben!
Mikael Dyreborg Hansen
Das war es für mich. Vielen Dank!
Freeman Helmuth
3
GoDaddy erstellt private Schlüssel "generate-private-key.txt", denen eine Stückliste vorangestellt ist, was dieses Problem verursacht. Zumindest auf einem Mac zeigte das Ablegen des Schlüsseltextes mit cat die Stückliste nicht an, aber das Betrachten mit weniger. Ich habe BBEdit verwendet, um die Stückliste zu entfernen, aber alle, die das Format ändern oder die ersten vier Bytes abschneiden können, funktionieren.
Seth Noble
54

Ich habe die Kopf- und Fußzeile der PEM-Datei in geändert

-----BEGIN RSA PRIVATE KEY-----

und

-----END RSA PRIVATE KEY-----

Endlich funktioniert es!

tkpl
quelle
1
Sie können -inform pemdem Befehl auch hinzufügen , um das gleiche Ergebnis zu erhalten. ZB openssl rsa -in server.key -modulus -noout -inform pem.
Simon Woodside
1
Überprüfen Sie stackoverflow.com/questions/54994641/…, ob es Ihr Problem löst
qstack
Etwas funktioniert bereits korrekt mit dem "schlechten" Format (dh unveränderten Headern). Dies ist also eine provisorische Lösung, die etwas kaputt macht, das bereits einwandfrei funktioniert hat, z. B. einen Reverse-Proxy, der nicht abstürzt, weil diese manuell fehlen -bearbeitete Kopf- und Fußzeilen. Yipes!
Alejandrob
31

Ihre .key-Datei enthält unzulässige Zeichen. Sie können die .key-Datei folgendermaßen überprüfen:

# file server.key

Ausgabe "server.key: UTF-8 Unicode-Text (mit Stücklisten)" bedeutet, dass es sich um einen einfachen Text handelt, nicht um eine Schlüsseldatei. Die korrekte Ausgabe sollte "server.key: PEM RSA private key" sein.

Verwenden Sie den folgenden Befehl, um unzulässige Zeichen zu entfernen:

# tail -c +4 server.key > new_server.key

Der new_server.key sollte korrekt sein.

Für mehr Details können Sie hier klicken , danke für den Beitrag.

张 俊
quelle
1
file server.keyDieser Befehl hat mir geholfen, das Problem zu lösen. Vielen Dank.
itsHarshad
Der Befehl tail scheint meiner Schlüsseldatei seltsame Formatierungszeichen hinzugefügt zu haben. Ich bin mir nicht sicher, warum das so ist.
Ryanwebjackson
Dies in Kombination mit der Antwort @tkpl scheint die Fehler für mich beseitigt zu haben.
Ryanwebjackson
6
> I have a .key file which is PEM formatted private key file.
> ...
> Here's some asn1parse of the .key file...

Dass es in Ordnung zu sein scheint, lässt asn1parsemich glauben, dass es nicht PEM-codiert ist.


Kann ich noch etwas ausprobieren?

Versuchen Sie Folgendes, da es sich anscheinend um ASN.1 handelt.

$ openssl rsa -in server.key -inform DER -modulus -noout

Beachten Sie das -inform DERUmschalten zwischen Codierungen.

jww
quelle
6

CA-Zertifikat erstellen

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem
Pravind Kumar
quelle
5

Entfernen Sie alle Leerzeichen am Anfang der .key-Datei.

Johnnycardy
quelle
5

Entschlossenheit auf meiner Seite. Ändern Sie die Codierung in UTF8 ohne Stückliste

Kosmo Para
quelle
2

Ich bin unter Windows 10 und habe meinen Schlüssel mit Windows 1252- Codierung gespeichert und es hat bei mir funktioniert. Bei einer anderen StackOverflow-Frage haben einige Leute dies mit UTF-8 mit Stückliste behoben .

Mit anderen Worten kann es sich um die Dateicodierung handeln.

Rafael ZB Bravo
quelle
1

Möglicherweise ist der private Schlüssel selbst nicht in der Datei vorhanden. Ich hatte auch das gleiche Problem, aber das Problem ist, dass in der Datei kein privater Schlüssel vorhanden ist.

Dhruvil Shah
quelle
1

Dies kann passieren, wenn Sie versuchen, mit Ihrem öffentlichen Schlüssel anstelle Ihres privaten Schlüssels ein Zertifikat zu erstellen. Sie sollten einen privaten Schlüssel verwenden

aris
quelle
0

Hatte heute das gleiche Problem und bemerkte, dass dies auftritt, wenn der Eigentümer / die Dateigruppe nicht diejenige ist, auf der die App ausgeführt wird, die den Schlüssel liest. Vielleicht ist auch Ihr Problem.

Ionut Stoica
quelle
0

Keiner der anderen Antworten schien in meinem Fall richtig, aber ich fand die richtige Antwort hier

Meine id_rsaDatei war bereits im PEM-Format, ich musste nur die .pemErweiterung zum Dateinamen hinzufügen .

Dank an

Folgende Optionen für den openssl rsa -informParameter sind möglich :PEM DER

Eine PEMcodierte Datei ist eine Nur -Text-Codierung, die ungefähr so ​​aussieht:

-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----

While DERist ein binäres Codierungsformat.

gregn3
quelle
0

In unserem Fall wurde das Problem dadurch verursacht, dass der private Schlüssel, den wir verwenden wollten, mit einer Passphrase verschlüsselt wurde.

Wir mussten den privaten Schlüssel mit entschlüsseln, ssh-keygen -pbevor wir den privaten Schlüssel mit dem Befehlszeilentool openssl verwenden konnten.

Paul Dejean
quelle
-6

Warum nicht Cetificate Bot verwenden

yum installiere epel-release

yum installiere certbot-nginx

Ein Zertifikat erhalten

certbot --nginx -d example.com -d www.example.com

Dylan B.
quelle