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

Mensaje de error

error:0308010C:digital envelope routines::unsupported

Node.js 17+ (OpenSSL 3) — code ERR_OSSL_EVP_UNSUPPORTED

Qué significa

Algún código pidió a OpenSSL 3 un algoritmo que su proveedor predeterminado ya no ofrece; el caso más conocido es MD4, que las versiones antiguas de webpack usan para calcular los hashes de la compilación. Node 17 pasó a OpenSSL 3, y los resúmenes y algoritmos de cifrado heredados se trasladaron a un proveedor «legacy» aparte, desactivado de forma predeterminada. El error nombra el mecanismo (EVP, la capa de sobre digital), no al culpable, y el mismo código aparece siempre que se pide a OpenSSL 3 un algoritmo retirado, aunque la combinación de webpack con Node 17 o posterior produce la inmensa mayoría de los casos.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Actualizar las herramientas de compilación (la solución de verdad)

    webpack ≥ 5.61 (y 4.47 en la rama 4.x) recurre a una implementación de MD4 en WASM cuando OpenSSL ya no la proporciona; react-scripts 5 ya lo incluye. Así se elimina el problema en lugar de ocultarlo.

    bash
    npm install --save-dev webpack@latest
    # CRA projects:
    npm install --save-dev react-scripts@5
  2. 2.

    Solución provisional: activar el proveedor legacy

    Vuelve a activar MD4 y compañía en todo el proceso. Es aceptable para desbloquear una compilación hoy; no lo dejes como solución permanente: vuelve a exponer algoritmos rotos a todo el código del proceso.

    bash
    NODE_OPTIONS=--openssl-legacy-provider npm run build
  3. 3.

    En tu propio código, sustituir el algoritmo

    Para huellas no criptográficas sirve cualquier resumen moderno; nada que verifique firmas debería usar MD4/MD5, para empezar.

    js
    // before: createHash("md4")
    import { createHash } from "node:crypto";
    const digest = createHash("sha256").update(data).digest("hex");

Errores relacionados

Explorar toda la base de datos de errores de firma