Zum Inhalt springen
ecdsa.com
Node.js 17+ (OpenSSL 3)Node.js crypto

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

So behebst du den Fehler

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen