Fehlermeldung
error:0308010C:digital envelope routines::unsupported
Node.js 17+ (OpenSSL 3) — code ERR_OSSL_EVP_UNSUPPORTED
Was der Fehler bedeutet
Irgendein Code hat bei OpenSSL 3 einen Algorithmus angefordert, den dessen Standard-Provider nicht mehr anbietet – allen voran MD4, das alte webpack-Versionen zum Hashen beim Build verwenden. Node 17 ist auf OpenSSL 3 umgestiegen, und veraltete Digests und Verschlüsselungsverfahren sind in einen separaten Provider namens „legacy“ gewandert, der standardmäßig deaktiviert ist. Der Fehler nennt den Mechanismus (EVP, die Digital-Envelope-Schicht), nicht den Verursacher. Derselbe Code erscheint überall dort, wo OpenSSL 3 nach einem ausgemusterten Algorithmus gefragt wird, doch die überwältigende Mehrheit der Treffer geht auf die Kombination aus webpack und Node 17+ zurück.
Warum der Fehler auftritt
Alte Build-Tools, die MD4 anfordern
häufigwebpack 4 bis 4.46 (und die Tools, die es auf diese Version festlegen – react-scripts 4, vue-cli 4, ältere Angular-Versionen) hashen Module standardmäßig mit MD4. Unter Node ≥17 bricht der erste Build-Schritt mit diesem Fehler ab. Der Stacktrace zeigt meist createHash innerhalb von webpack. webpack 4.47.0 hat denselben Fallback wie 5.61 erhalten, sodass das letzte Release von webpack 4 wieder baut.
Anwendungscode mit veralteten Primitiven
gelegentlichDirekte Aufrufe wie createHash("md4"), createCipheriv mit RC4/DES/Blowfish oder Abhängigkeiten, die dasselbe tun. Diese Algorithmen sind kryptografisch gebrochen und wurden absichtlich aus dem Standard-Provider entfernt.
Uralte PKCS#12- und Keystore-Dateien
seltenAlte .p12-/.pfx-Bundles, die mit Verfahren auf Basis von RC2/RC4 verschlüsselt sind, scheitern genauso, wenn sie auf Systemen mit OpenSSL 3 geladen werden: openssl pkcs12 ohne -legacy meldet diesen Code und nennt RC2-40-CBC. Das Node-eigene tls.createSecureContext() lehnt dieselbe Datei mit einer anderen Meldung ab: „Unsupported PKCS12 PFX data“.
So behebst du den Fehler
- 1.
Toolchain aktualisieren (die eigentliche Lösung)
webpack ≥ 5.61 (und 4.47 in der 4.x-Reihe) weicht auf eine WASM-Implementierung von MD4 aus, wenn OpenSSL sie nicht mehr bereitstellt; in react-scripts 5 ist das enthalten. Das beseitigt das Problem, statt es zu verdecken.
bash npm install --save-dev webpack@latest # CRA projects: npm install --save-dev react-scripts@5 - 2.
Notlösung: Legacy-Provider aktivieren
Aktiviert MD4 und Konsorten wieder für den gesamten Prozess. Vertretbar, um einen Build heute wieder zum Laufen zu bringen; mach daraus keine Dauerlösung – damit stehen gebrochene Algorithmen wieder jedem Code im Prozess zur Verfügung.
bash NODE_OPTIONS=--openssl-legacy-provider npm run build - 3.
Im eigenen Code den Algorithmus ersetzen
Für nicht-kryptografische Fingerabdrücke taugt jeder moderne Digest; was Signaturen prüft, sollte von vornherein nicht auf MD4/MD5 setzen.
js // before: createHash("md4") import { createHash } from "node:crypto"; const digest = createHash("sha256").update(data).digest("hex");