Fehlermeldung
error:0480006C:PEM routines::no start line
Reproduziert unter Node 26 (OpenSSL 3.5) mit X509Certificate und tls.createSecureContext(). OpenSSL 1.1.1 gibt denselben Fehler als „error:0909006C:PEM routines:get_name:no start line“ aus, OpenSSL 1.1.0 als „error:0906D06C:PEM routines:PEM_read_bio:no start line“. Eine verwandte Meldung: „error:04800066:PEM routines::bad end line“, wenn die END-Markierung beschädigt ist.
OpenSSL 3.x — also surfaces in Node as ERR_OSSL_PEM_NO_START_LINE
Was der Fehler bedeutet
Ein PEM-Parser hat die Eingabe nach einer Zeile „-----BEGIN ...-----“ durchsucht, die zum erwarteten Objekt passt, und keine gefunden. Entweder ist die Datei gar kein PEM (binäres DER, JSON, leer), oder das BEGIN-Label nennt ein anderes Objekt als das, das der Parser erwartet, oder der Rahmen wurde unterwegs beschädigt.
Warum der Fehler auftritt
An einen PEM-Parser übergebene DER-Daten (binär)
häufig.der-, .cer- und .pfx-Dateien sind binär und enthalten per Definition keine BEGIN-Zeile. Ladefunktionen, die nur PEM lesen – tls.createSecureContext() für ein Zertifikat, die Befehlszeile von OpenSSL 1.1 –, landen genau hier. (X509Certificate von Node und die Befehle von OpenSSL 3 erkennen DER selbstständig.)
Label passt nicht: richtige Datei, falsches Objekt
häufigParser suchen nach ihrem eigenen Label. Code, der Zertifikate liest, überspringt Blöcke „-----BEGIN PRIVATE KEY-----“ vollständig und meldet „no start line“ – technisch korrekt: Eine Startzeile für CERTIFICATE gibt es nicht.
Rahmen bei der Übertragung beschädigt
häufigWörtliche Zeichenfolgen \n aus Umgebungsvariablen oder JSON oder ähnlich aussehende Striche, die aus einer Textverarbeitung eingefügt wurden, verhindern, dass die BEGIN-Zeile erkannt wird. Eine UTF-8-BOM vor dem ersten Bindestrich lässt OpenSSL 1.1 scheitern (OpenSSL 3 und Node überspringen sie); Windows-Zeilenenden (CRLF) und ein fehlender abschließender Zeilenumbruch werden toleriert.
So behebst du den Fehler
- 1.
Die ersten Bytes ansehen
Eine einzige Zeile von xxd unterscheidet PEM (ASCII-Bindestriche), DER (erstes Byte 0x30) und Datenmüll. Konvertiere oder korrigiere dann entsprechend.
bash head -c 32 file | xxd # 2d 2d 2d 2d 2d ("-----") → PEM: check the label matches what the tool expects # 30 82 ... → DER: add -inform der or convert: openssl x509 -inform der -in cert.der -out cert.pem - 2.
Bei der Übertragung beschädigtes PEM reparieren
Stelle die Zeilenumbrüche wieder her und entferne BOM und CR. Nach der Reparatur muss die BEGIN-Zeile genau aus fünf Bindestrichen, dem Label und wieder fünf Bindestrichen bestehen.
bash printf '%s' "$PEM_VAR" | sed 's/\\n/\n/g' | sed '1s/^\xef\xbb\xbf//' | tr -d '\r' > fixed.pem head -1 fixed.pem # -----BEGIN CERTIFICATE----- - 3.
In Node vor dem Parsen normalisieren
Derselbe Fehler erscheint bei X509Certificate und bei der Option cert von tls.createSecureContext() als Code ERR_OSSL_PEM_NO_START_LINE; die Korrektur der Zeilenumbrüche aus Umgebungsvariablen löst die meisten Fälle. Funktionen, die Schlüssel laden (createPublicKey, createPrivateKey), melden nicht parsbare Eingaben stattdessen als „error:1E08010C:DECODER routines::unsupported“.
js import { X509Certificate } from "node:crypto"; const cert = new X509Certificate(process.env.CERT_PEM.replace(/\\n/g, "\n"));