Saltar al contenido
ecdsa.com
Node.js crypto (OpenSSL 3)crypto de Node.js

Mensaje de error

error:1E08010C:DECODER routines::unsupported

Reproducido en Node 26 / OpenSSL 3.x. La CLI de OpenSSL imprime la forma larga: «error:1E08010C:DECODER routines:OSSL_DECODER_from_bio:unsupported». En Node ≤16 (OpenSSL 1.1.1), los mismos errores producían mensajes distintos.

Node.js crypto (OpenSSL 3) — code ERR_OSSL_UNSUPPORTED

Qué significa

El decodificador de OpenSSL 3 no pudo analizar el material de clave pasado a createPrivateKey(), createPublicKey(), sign() o verify(). Pese a la palabra «unsupported», casi nunca se trata de un algoritmo que falte: significa que los bytes no son una clave legible en ninguno de los formatos que probó el decodificador.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Normalizar los PEM de las variables de entorno y comprobar la etiqueta

    Restaura los saltos de línea e imprime la primera línea. Si la etiqueta dice PUBLIC KEY donde llamas a createPrivateKey, la variable apunta a la clave equivocada.

    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.

    Indicar DER explícitamente

    Cuando la clave es DER binario (de un blob de una base de datos, de una conversión desde un JWKS o de protobuf), indica el formato y el tipo; el decodificador no lo adivina.

    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.

    Comprobar el material fuera de Node

    Deja que OpenSSL te diga qué son realmente los bytes. Si esto también falla, los propios datos están dañados: corrige el origen, no la llamada de Node.

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

Errores relacionados

Explorar toda la base de datos de errores de firma