Fehlermeldung
unable to load certificate
Wortlaut von OpenSSL 1.1.x. OpenSSL 3.0 gibt „Could not read certificate from cert.pem“ aus, gefolgt von „Unable to load certificate“ mit großem U; OpenSSL 3.5 und neuer geben „Could not find certificate from cert.pem“ und eine Stack-Zeile der STORE-Routinen aus (reproduziert mit 3.0.2 und 3.6.4). Der Wortlaut variiert je nach Version; der Fehler ist derselbe.
Was der Fehler bedeutet
openssl x509 (oder ein anderer Befehl, der Zertifikate verarbeitet) konnte aus der Datei kein Zertifikat parsen. Die Eingabe ist ein anderes PEM-Objekt (Schlüssel, CSR), hat die falsche binäre Kodierung oder ist Text, der gar keine X.509-Struktur ist – der Befehl kam nie so weit, Felder zu lesen. Da Zertifikatsdateien unabhängig von der Kodierung .crt oder .cer heißen, sagt dir der Dateiname hier nichts; nur die Bytes verraten es.
Warum der Fehler auftritt
Die Datei enthält einen Schlüssel oder CSR, kein Zertifikat
häufigBlöcke mit BEGIN PRIVATE KEY, BEGIN PUBLIC KEY oder BEGIN CERTIFICATE REQUEST sind keine Zertifikate. Besonders CSRs werden ständig für Zertifikate gehalten – ein CSR ist das, was du an eine CA schickst; das Zertifikat ist das, was zurückkommt.
DER-Zertifikat ohne -inform der
häufig.cer- und .crt-Dateien aus dem Windows-Umfeld sind häufig binäres DER. openssl x509 erwartet in OpenSSL 1.1 standardmäßig PEM und findet den PEM-Rahmen nicht; OpenSSL 3 erkennt DER selbstständig.
PKCS#7- oder PKCS#12-Bundle
gelegentlich.p7b- und .pfx-/.p12-Dateien sind Container, die Zertifikate enthalten, keine bloßen Zertifikate. Diese Container brauchen eigene Befehle zum Entpacken, bevor x509 den Inhalt lesen kann.
So behebst du den Fehler
- 1.
Erst bestimmen, dann konvertieren
Prüfe das Label oder die ersten Bytes; konvertiere DER bei Bedarf in PEM.
bash head -1 cert.file # BEGIN what? openssl x509 -inform der -in cert.der -out cert.pem # DER → PEM - 2.
Containerformate entpacken
Extrahiere die Zertifikate aus PKCS#7- und PKCS#12-Bundles in einfaches PEM.
bash openssl pkcs7 -print_certs -in bundle.p7b -out certs.pem openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out cert.pem - 3.
Für einen CSR den Befehl req verwenden
Enthält die Datei einen Request, untersuche ihn mit req – und denk daran, dass er erst noch von einer CA signiert werden muss, bevor daraus ein Zertifikat wird.
bash openssl req -in request.csr -noout -text