Saltar al contenido
ecdsa.com
OpenSSL 3.xCLI de OpenSSL

Mensaje de error

error:0480006C:PEM routines::no start line

Reproducido en Node 26 (OpenSSL 3.5) con X509Certificate y tls.createSecureContext(). OpenSSL 1.1.1 imprime el mismo fallo como «error:0909006C:PEM routines:get_name:no start line», y OpenSSL 1.1.0, como «error:0906D06C:PEM routines:PEM_read_bio:no start line». Un error emparentado: «error:04800066:PEM routines::bad end line», cuando el marcador END está dañado.

OpenSSL 3.x — also surfaces in Node as ERR_OSSL_PEM_NO_START_LINE

Qué significa

Un analizador PEM recorrió la entrada en busca de una línea «-----BEGIN ...-----» que corresponda al objeto que espera y no encontró ninguna. O bien el archivo no es PEM en absoluto (DER binario, JSON, vacío), o bien la etiqueta BEGIN nombra un objeto distinto del que quiere el analizador, o bien la estructura de líneas del PEM se estropeó por el camino.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Mirar los primeros bytes

    Una sola línea de xxd distingue PEM (guiones ASCII), DER (primer byte 0x30) y basura. Después, convierte o corrige según corresponda.

    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. 2.

    Reparar un PEM dañado en el transporte

    Restaura los saltos de línea y elimina el BOM y los CR. Tras la reparación, la línea BEGIN debe ser exactamente cinco guiones, la etiqueta y cinco guiones.

    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. 3.

    En Node, normalizar antes de analizar

    El mismo error aparece con el código ERR_OSSL_PEM_NO_START_LINE en X509Certificate y en la opción cert de tls.createSecureContext(); restaurar los saltos de línea de la variable de entorno resuelve la mayoría de los casos. En cambio, cuando los cargadores de claves (createPublicKey, createPrivateKey) no pueden analizar la entrada, informan de «error:1E08010C:DECODER routines::unsupported».

    js
    import { X509Certificate } from "node:crypto";
    const cert = new X509Certificate(process.env.CERT_PEM.replace(/\\n/g, "\n"));

Errores relacionados

Explorar toda la base de datos de errores de firma