Mensagem de erro
error:0308010C:digital envelope routines::unsupported
Node.js 17+ (OpenSSL 3) — code ERR_OSSL_EVP_UNSUPPORTED
O que significa
Algum código pediu ao OpenSSL 3 um algoritmo que o provedor padrão dele não oferece mais — o caso mais famoso é o MD4, que versões antigas do webpack usam para calcular os hashes do build. O Node 17 passou a usar o OpenSSL 3, e digests e cifras legados foram para um provedor “legacy” separado, desativado por padrão. O erro nomeia o mecanismo (EVP, a camada de envelope digital), não o culpado — e o mesmo código aparece sempre que alguém pede ao OpenSSL 3 um algoritmo aposentado, embora a combinação de webpack com Node 17+ responda pela grande maioria dos casos.
Por que acontece
Ferramentas de build antigas pedem MD4
comumO webpack 4 até a 4.46 (e as ferramentas que fixam essa versão — react-scripts 4, vue-cli 4, Angular mais antigo) calcula o hash dos módulos com MD4 por padrão. No Node ≥17, a primeira etapa do build já falha com este erro. O stack trace costuma mostrar createHash dentro do webpack. O webpack 4.47.0 ganhou a mesma implementação de reserva da 5.61, então a última versão do webpack 4 volta a compilar.
Código da aplicação usa primitivas legadas
ocasionalChamadas diretas como createHash("md4"), createCipheriv com RC4/DES/Blowfish, ou dependências que fazem o mesmo. Esses algoritmos estão quebrados do ponto de vista criptográfico e foram retirados de propósito do provedor padrão.
Arquivos PKCS#12/keystore muito antigos
raraBundles .p12/.pfx antigos, criptografados com esquemas baseados em RC2/RC4, esbarram no mesmo problema quando carregados em ambientes com OpenSSL 3: o openssl pkcs12 sem -legacy informa este código e cita RC2-40-CBC. O próprio tls.createSecureContext() do Node rejeita o mesmo arquivo com outra mensagem, “Unsupported PKCS12 PFX data”.
Como corrigir
- 1.
Atualizar as ferramentas de build (a correção de verdade)
O webpack ≥ 5.61 (e a 4.47, na linha 4.x) recorre a uma implementação WASM do MD4 quando o OpenSSL não a oferece mais; o react-scripts 5 já traz essa versão. Isso elimina o problema em vez de mascará-lo.
bash npm install --save-dev webpack@latest # CRA projects: npm install --save-dev react-scripts@5 - 2.
Paliativo: ativar o provedor legacy
Reativa o MD4 e companhia em todo o processo. É aceitável para destravar um build hoje; não torne isso permanente — isso volta a expor algoritmos quebrados a todo o código do processo.
bash NODE_OPTIONS=--openssl-legacy-provider npm run build - 3.
No seu próprio código, substituir o algoritmo
Para impressões digitais sem fins criptográficos, qualquer digest moderno serve; e nada que verifique assinaturas deveria usar MD4/MD5, para começo de conversa.
js // before: createHash("md4") import { createHash } from "node:crypto"; const digest = createHash("sha256").update(data).digest("hex");