Pular para o conteúdo
ecdsa.com
Node.js crypto (OpenSSL 3)Módulo crypto do Node.js

Mensagem de erro

error:1E08010C:DECODER routines::unsupported

Reproduzido no Node 26 / OpenSSL 3.x. A CLI do OpenSSL imprime a forma longa: “error:1E08010C:DECODER routines:OSSL_DECODER_from_bio:unsupported”. No Node ≤16 (OpenSSL 1.1.1), os mesmos equívocos produziam mensagens diferentes.

Node.js crypto (OpenSSL 3) — code ERR_OSSL_UNSUPPORTED

O que significa

O decodificador do OpenSSL 3 não conseguiu interpretar o material de chave que você passou para createPrivateKey(), createPublicKey(), sign() ou verify(). Apesar da palavra “unsupported”, quase nunca se trata de um algoritmo ausente — significa que os bytes não formam uma chave legível em nenhum dos formatos que o decodificador tentou.

Por que acontece

Como corrigir

  1. 1.

    Normalizar os PEMs vindos de variáveis de ambiente e conferir o rótulo

    Restaure as quebras de linha e imprima a primeira linha. Se o rótulo diz PUBLIC KEY onde você chama createPrivateKey, a variável aponta para a chave errada.

    js
    const pem = process.env.SIGNING_KEY.replace(/\\n/g, "\n");
    console.log(pem.split("\n")[0]);
    // -----BEGIN PRIVATE KEY-----      → createPrivateKey(pem)
    // -----BEGIN PUBLIC KEY-----       → createPublicKey(pem)
    // -----BEGIN EC PRIVATE KEY-----   → createPrivateKey(pem)  (SEC1, also fine)
  2. 2.

    Declarar o DER explicitamente

    Quando a chave é DER binário (de um blob do banco de dados, de uma conversão de JWKS ou de protobuf), informe o formato e o tipo; o decodificador não vai adivinhar.

    js
    import { createPrivateKey } from "node:crypto";
    
    const key = createPrivateKey({
      key: derBuffer,
      format: "der",
      type: "pkcs8",   // or "sec1" for BEGIN EC PRIVATE KEY material
    });
  3. 3.

    Verificar o material fora do Node

    Deixe o OpenSSL dizer o que os bytes realmente são. Se isso também falhar, os próprios dados estão corrompidos — corrija a origem, não a chamada no Node.

    bash
    openssl pkey -in key.pem -noout -text | head
    # for DER:
    openssl pkey -in key.der -inform der -noout -text | head

Erros relacionados

Ver toda a base de erros de assinatura