Message d’erreur
error:0308010C:digital envelope routines::unsupported
Node.js 17+ (OpenSSL 3) — code ERR_OSSL_EVP_UNSUPPORTED
Ce que cela signifie
Du code a demandé à OpenSSL 3 un algorithme que son fournisseur par défaut ne propose plus, le cas le plus célèbre étant MD4, que les anciennes versions de webpack utilisent pour le hachage du build. Node 17 est passé à OpenSSL 3, et les algorithmes de condensat et de chiffrement hérités ont été déplacés dans un fournisseur distinct, « legacy », désactivé par défaut. L’erreur nomme le mécanisme (EVP, la couche d’enveloppe numérique), pas le coupable ; le même code apparaît partout où l’on demande à OpenSSL 3 un algorithme retiré, même si la combinaison webpack sur Node 17+ produit l’écrasante majorité des occurrences.
Pourquoi cela se produit
D’anciens outils de build qui demandent MD4
fréquentewebpack 4 jusqu’à 4.46 (et les outils qui en figent la version : react-scripts 4, vue-cli 4, les anciennes versions d’Angular) hachent les modules avec MD4 par défaut. Sous Node ≥17, la première étape du build s’arrête sur cette erreur. La trace de pile montre généralement createHash dans webpack. webpack 4.47.0 a ajouté le même mécanisme de repli que la 5.61, si bien que le build fonctionne de nouveau avec la dernière version de webpack 4.
Du code applicatif qui utilise des primitives héritées
occasionnelleDes appels directs comme createHash("md4"), createCipheriv avec RC4/DES/Blowfish, ou des dépendances qui font de même. Ces algorithmes sont cassés sur le plan cryptographique et ont été sortis intentionnellement du fournisseur par défaut.
Fichiers PKCS#12 ou magasins de clés très anciens
rareLes anciens fichiers .p12/.pfx chiffrés avec des schémas fondés sur RC2/RC4 se heurtent au même obstacle lorsqu’ils sont chargés sur une pile OpenSSL 3 : openssl pkcs12 sans -legacy signale ce code et nomme RC2-40-CBC. Le tls.createSecureContext() de Node rejette le même fichier avec un autre message, « Unsupported PKCS12 PFX data ».
Comment corriger l’erreur
- 1.
Mettre à jour la chaîne d’outils (le vrai correctif)
webpack ≥ 5.61 (et 4.47 dans la branche 4.x) se rabat sur une implémentation WASM de MD4 lorsque OpenSSL ne la fournit plus ; react-scripts 5 intègre cette version. Cela supprime le problème au lieu de le masquer.
bash npm install --save-dev webpack@latest # CRA projects: npm install --save-dev react-scripts@5 - 2.
Solution provisoire : activer le fournisseur legacy
Réactive MD4 et consorts pour tout le processus. Acceptable pour débloquer un build aujourd’hui ; n’en faites pas une solution permanente : cela expose de nouveau des algorithmes cassés à tout le code du processus.
bash NODE_OPTIONS=--openssl-legacy-provider npm run build - 3.
Dans votre propre code, remplacer l’algorithme
Pour une empreinte non cryptographique, n’importe quel condensat moderne convient ; rien de ce qui vérifie des signatures n’aurait jamais dû reposer sur MD4/MD5.
js // before: createHash("md4") import { createHash } from "node:crypto"; const digest = createHash("sha256").update(data).digest("hex");