Fehlermeldung
unable to load Public Key
Wortlaut von OpenSSL 1.1.x; immer noch die meistzitierte Form. OpenSSL 3.0 gibt „Could not read key of Public Key from cert.pem“ aus, OpenSSL 3.5 und neuer „Could not find private key of Public Key from cert.pem“ (reproduziert mit 3.0.2 und 3.6.4) – derselbe Fehler, neue Formulierung.
Was der Fehler bedeutet
Der openssl-Befehl hat versucht, aus der angegebenen Datei einen öffentlichen Schlüssel zu lesen, und nichts gefunden, das er als solchen erkennt. Die Datei existiert – das Problem ist ihr Inhalt: ein anderer Objekttyp (Zertifikat, privater Schlüssel, SSH-Schlüssel), die falsche Kodierung oder gar kein Schlüssel.
Warum der Fehler auftritt
Die Datei ist ein Zertifikat, kein nackter Schlüssel
häufig„-----BEGIN CERTIFICATE-----“ ist ein X.509-Zertifikat, das einen öffentlichen Schlüssel enthält, aber selbst keiner ist. Befehle, die ein nacktes SPKI erwarten (-pubin), lehnen es ab; der Schlüssel muss zuerst extrahiert werden.
Ein OpenSSH-Schlüssel, wo PEM erwartet wird
häufigEinzeilige Einträge der Form „ecdsa-sha2-nistp256 AAAA... user@host“ (Format von authorized_keys) sind die eigene Kodierung von OpenSSH, kein PEM/DER. OpenSSL kann sie ohne Konvertierung nicht lesen.
Privater Schlüssel mit -pubin übergeben
häufigDas Flag -pubin sichert zu, dass die Eingabe ein öffentlicher Schlüssel ist. OpenSSL 1.1 und 3.0 lehnen „-----BEGIN PRIVATE KEY-----“ damit ab – lass das Flag weg oder leite zuerst die öffentliche Hälfte ab. (OpenSSL 3.5 und neuer lesen stattdessen stillschweigend die öffentliche Hälfte.)
DER-Datei als PEM gelesen
gelegentlichUnter OpenSSL 1.1 brauchen binäre .der- und .cer-Dateien -inform der: Der PEM-Parser findet in binären Daten keine BEGIN-Zeile und scheitert. OpenSSL 3 erkennt DER selbstständig.
So behebst du den Fehler
- 1.
Schlüssel aus einem Zertifikat extrahieren
Ein einziger Befehl erzeugt das PEM mit dem öffentlichen Schlüssel im SPKI-Format, das Befehle mit -pubin erwarten.
bash openssl x509 -in cert.pem -pubkey -noout > pubkey.pem openssl pkey -pubin -in pubkey.pem -noout -text # now loads - 2.
OpenSSH-Schlüssel in PEM konvertieren
ssh-keygen exportiert einen Eintrag im Format von authorized_keys als Standard-PEM mit BEGIN PUBLIC KEY (SPKI) – ssh-keygen nennt dieses Format PKCS8.
bash ssh-keygen -f id_ecdsa.pub -e -m pkcs8 > pubkey.pem - 3.
Öffentliche Hälfte aus einem privaten Schlüssel ableiten
Ist die Datei tatsächlich der private Schlüssel, verwende kein -pubin – leite den öffentlichen Schlüssel ab.
bash openssl pkey -in private.pem -pubout -out pubkey.pem