Перейти к содержимому
ecdsa.com
OpenSSL 3.xOpenSSL CLI

Сообщение об ошибке

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

Воспроизведено на Node 26 (OpenSSL 3.5) с X509Certificate и tls.createSecureContext(). OpenSSL 1.1.1 выводит ту же ошибку как «error:0909006C:PEM routines:get_name:no start line», OpenSSL 1.1.0 — как «error:0906D06C:PEM routines:PEM_read_bio:no start line». Родственная ошибка: «error:04800066:PEM routines::bad end line», если повреждён маркер END.

OpenSSL 3.x — also surfaces in Node as ERR_OSSL_PEM_NO_START_LINE

Что это означает

Парсер PEM искал во входных данных строку «-----BEGIN ...-----», соответствующую ожидаемому объекту, и не нашёл её. Либо файл вообще не в формате PEM (двоичный DER, JSON, пустой файл), либо метка BEGIN называет не тот объект, который нужен парсеру, либо обрамление повредилось по пути.

Почему это происходит

Как исправить

  1. 1.

    Посмотрите на первые байты

    Одной строки вывода xxd достаточно, чтобы отличить PEM (дефисы ASCII), DER (первый байт 0x30) и мусор. Затем преобразуйте или исправьте файл в зависимости от результата.

    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.

    Восстановите PEM, повреждённый при передаче

    Восстановите переводы строк и удалите BOM/CR. После исправления строка BEGIN должна состоять ровно из 5 дефисов, метки и ещё 5 дефисов.

    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.

    В Node нормализуйте данные перед разбором

    X509Certificate и параметр cert функции tls.createSecureContext() выдают ту же ошибку с кодом ERR_OSSL_PEM_NO_START_LINE; в большинстве случаев помогает исправление переводов строк из переменной окружения. Загрузчики ключей (createPublicKey, createPrivateKey) на нераспознаваемые входные данные выдают вместо этого «error:1E08010C:DECODER routines::unsupported».

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

Связанные ошибки

Открыть всю базу ошибок подписей