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

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

Como corrigir

  1. 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. 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. 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");

Erros relacionados

Ver toda a base de erros de assinatura