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
Herramientas de compilación antiguas que piden MD4
frecuentewebpack 4 hasta la 4.46 (y las herramientas que lo fijan: react-scripts 4, vue-cli 4, versiones antiguas de Angular) calcula el hash de los módulos con MD4 de forma predeterminada. En Node ≥17, el primer paso de la compilación falla con este error. La traza de pila suele mostrar createHash dentro de webpack. webpack 4.47.0 añadió el mismo mecanismo alternativo que la 5.61, así que la última versión de webpack 4 vuelve a compilar.
Código de la aplicación que usa primitivas heredadas
ocasionalLlamadas directas como createHash("md4"), createCipheriv con RC4/DES/Blowfish, o dependencias que hacen lo mismo. Estos algoritmos están rotos criptográficamente y se sacaron a propósito del proveedor predeterminado.
Archivos PKCS#12 o de almacén de claves muy antiguos
raraLos archivos .p12/.pfx antiguos cifrados con esquemas basados en RC2/RC4 se topan con el mismo problema al cargarse en entornos con OpenSSL 3: openssl pkcs12 sin -legacy informa de este código y menciona RC2-40-CBC. El propio tls.createSecureContext() de Node rechaza el mismo archivo con otro mensaje, «Unsupported PKCS12 PFX data».
Cómo solucionarlo
- 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.
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.
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");