# error:0308010C digital envelope routines::unsupported: cause and fix

The error appears when Node 17 or later runs a toolchain that asks OpenSSL 3 for md4. Here is why it happens, the temporary fix and the lasting one.

> Page: https://ui.eneawork.it/blog/errore-0308010c-digital-envelope-routines
> Markdown: https://ui.eneawork.it/blog/errore-0308010c-digital-envelope-routines.md

*2026-11-01*

Risposta breve: il bundler ha chiesto a OpenSSL 3 un algoritmo, md4, che OpenSSL 3 non espone più nel provider predefinito. Non è un errore del tuo codice e non si corregge nel codice: si corregge aggiornando lo strumento che calcola gli hash, oppure dicendo a Node di riattivare il provider legacy.

La domanda «Error message "error:0308010C:digital envelope routines::unsupported"» vale 2572 voti su Stack Overflow (letto il 31 ottobre 2026 con la Stack Exchange API): fonte. Il catalogo EneUI misura 111.985 componenti, 1.556 blocchi, 12.808 icone da 1.472 librerie, letti da /api/stats il 1 novembre 2026. Ogni comando qui sotto è eseguibile in locale: nessun passaggio richiede un account.

## Il messaggio esatto

Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:79:19) opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED'

Il prefisso 0308010C è il codice OpenSSL: dice che l'algoritmo richiesto non è disponibile con le impostazioni correnti del provider. Il resto dello stack indica dove Node ha provato a creare l'hash.

## Perché succede

Node 17 è passato a OpenSSL 3. Webpack 4, e gli strumenti che lo incapsulano, come create-react-app 4, vue-cli 4 e alcune configurazioni di Next 11, usa md4 per calcolare gli identificatori dei chunk. OpenSSL 3 mette md4 nel provider legacy, disattivato per impostazione predefinita perché considerato debole.

Da qui il paradosso: il progetto non è vecchio di dieci anni, ma un singolo passaggio della build dipende da un algoritmo che il sistema operativo non considera più sicuro.

## Correzione rapida, da usare come tampone

# macOS / Linux NODE_OPTIONS=--openssl-legacy-provider npm run build # PowerShell $env:NODE_OPTIONS = "--openssl-legacy-provider" npm run build

Il flag riattiva il provider legacy per l'intero processo Node. Funziona subito e va bene per sbloccare una build locale. Non va lasciato nella pipeline di produzione: riattiva algoritmi deboli anche per il codice che non ne ha bisogno.

## Correzione definitiva

npm ls webpack npx webpack --version

Il primo comando mostra chi porta webpack nell'albero delle dipendenze; il secondo la versione effettivamente usata. Se la versione è 4, il flag legacy è un sintomo, non la cura.

## Quando la correzione non funziona

Se l'errore resta con NODE_OPTIONS impostato, il processo che fallisce non eredita l'ambiente. Succede con script che lanciano un secondo Node, in container senza variabili passate, o in un comando che usa un worker separato. Verifica con node -p process.env.NODE_OPTIONS dentro lo stesso script che fallisce: se stampa vuoto, la variabile non è arrivata.

## Come prevenirlo

## Dove continuare

Il catalogo EneUI contiene 111.985 componenti e 1.556 blocchi con preview: sono record già compilati, quindi non ti costringono a ritoccare un toolchain legacy. Per capire quale libreria costa meno in build leggi quanto pesa una libreria UI; per la struttura del progetto App Router nel 2026; per il confronto tra approcci alternative a MUI. La classifica dei cataloghi misurati è in /best/ui-catalogues.

## FAQ

### È sicuro usare --openssl-legacy-provider in produzione?

No. Il flag riattiva algoritmi che OpenSSL 3 considera legacy per tutto il processo Node, non solo per il comando che ne ha bisogno. Va usato per sbloccare una build locale e rimosso prima della CI.

### Perché la build funziona sul mio computer e fallisce in CI?

Quasi sempre perché le due macchine hanno major di Node diverse: OpenSSL 3 arriva con Node 17. Controlla `node -v` nei due ambienti prima di toccare il codice.

### Devo tornare a Node 16?

No: Node 16 non è più supportato. La strada corretta è aggiornare il toolchain che chiama md4.

### L'errore riguarda anche Vite?

Di solito no: Vite usa esbuild e Rollup, che non dipendono da md4. Se lo vedi con Vite, arriva da un plugin o da uno script separato che invoca webpack.

### Come trovo il pacchetto che causa l'errore?

Parti da `npm ls webpack` e guarda quale strumento lo porta. Se la build passa da create-react-app, il colpevole è react-scripts 4.
