Pular para o conteúdo
ecdsa.com
OpenSSL 3.xCLI do OpenSSL

Mensagem de erro

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

Reproduzido no Node 26 (OpenSSL 3.5) com X509Certificate e tls.createSecureContext(). O OpenSSL 1.1.1 imprime a mesma falha como “error:0909006C:PEM routines:get_name:no start line”, e o OpenSSL 1.1.0, como “error:0906D06C:PEM routines:PEM_read_bio:no start line”. Um erro da mesma família: “error:04800066:PEM routines::bad end line”, quando o marcador END está danificado.

OpenSSL 3.x — also surfaces in Node as ERR_OSSL_PEM_NO_START_LINE

O que significa

Um parser de PEM procurou na entrada uma linha “-----BEGIN ...-----” correspondente ao objeto que espera e não encontrou nenhuma. Ou o arquivo nem é PEM (DER binário, JSON, vazio), ou o rótulo do BEGIN nomeia um objeto diferente do que o parser quer, ou a formatação foi corrompida no caminho.

Por que acontece

Como corrigir

  1. 1.

    Ver os primeiros bytes

    Uma linha de xxd distingue PEM (traços ASCII), DER (primeiro byte 0x30) e lixo. Depois, converta ou corrija conforme o caso.

    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 o PEM corrompido no transporte

    Restaure as quebras de linha e remova BOM/CR. Depois do reparo, a linha BEGIN deve ser exatamente cinco traços, o rótulo e cinco traços.

    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.

    No Node, normalizar antes de analisar

    O mesmo erro aparece com o código ERR_OSSL_PEM_NO_START_LINE no X509Certificate e na opção cert de tls.createSecureContext(); corrigir as quebras de linha da variável de ambiente resolve a maioria dos casos. Já as funções que carregam chaves (createPublicKey, createPrivateKey) relatam uma entrada que não conseguem analisar como “error:1E08010C:DECODER routines::unsupported”.

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

Erros relacionados

Ver toda a base de erros de assinatura