Перейти к содержимому
ecdsa.com
Node.js 17+ (OpenSSL 3)Модуль crypto в Node.js

Сообщение об ошибке

error:0308010C:digital envelope routines::unsupported

Node.js 17+ (OpenSSL 3) — code ERR_OSSL_EVP_UNSUPPORTED

Что это означает

Какой-то код запросил у OpenSSL 3 алгоритм, которого больше нет в провайдере по умолчанию — чаще всего MD4, которым старые версии webpack хешируют модули при сборке. Node 17 перешёл на OpenSSL 3, а устаревшие дайджесты и шифры переехали в отдельный провайдер «legacy», который по умолчанию выключен. Ошибка называет механизм (EVP, уровень «цифрового конверта»), а не виновника; тот же код появляется везде, где у OpenSSL 3 запрашивают выведенный из употребления алгоритм, хотя подавляющее большинство случаев даёт связка webpack и Node 17+.

Почему это происходит

Как исправить

  1. 1.

    Обновите инструменты сборки (настоящее решение)

    webpack ≥ 5.61 (и 4.47 в ветке 4.x) переключается на WASM-реализацию MD4, когда OpenSSL её больше не предоставляет; в react-scripts 5 такая версия уже входит. Это устраняет проблему, а не маскирует её.

    bash
    npm install --save-dev webpack@latest
    # CRA projects:
    npm install --save-dev react-scripts@5
  2. 2.

    Временная мера: включите провайдер legacy

    Снова включает MD4 и подобные алгоритмы для всего процесса. Это допустимый способ разблокировать сборку прямо сейчас, но не оставляйте его навсегда: взломанные алгоритмы снова становятся доступны всему коду в процессе.

    bash
    NODE_OPTIONS=--openssl-legacy-provider npm run build
  3. 3.

    В собственном коде замените алгоритм

    Для некриптографических отпечатков подойдёт любой современный хеш, а то, что проверяет подписи, вообще не следует строить на MD4/MD5.

    js
    // before: createHash("md4")
    import { createHash } from "node:crypto";
    const digest = createHash("sha256").update(data).digest("hex");

Связанные ошибки

Открыть всю базу ошибок подписей