🌐 Detecting your location…

كيفية إصلاح خطأ ERR_OSSL_EVP_UNSUPPORTED في Node.js

⏱️2 min read  ·  277 words

الخطأخطأ:0308010C:إجراءات المغلف الرقمي::غير مدعوم يظهر (ERR_OSSL_EVP_UNSUPPORTED) في Node.js عادةً عند إنشاء مشاريع قديمة (غالبًا باستخدام Webpack) على إصدارات Node.js الأحدث. يحدث هذا بسبب إزالة OpenSSL 3 الدعم للخوارزميات القديمة. وإليك كيفية إصلاحه بشكل صحيح.

لماذا يحدث هذا

حزم Node.js 17+ OpenSSL 3، التي عطلت بعض الخوارزميات القديمة (مثل التجزئة الأقدم المستندة إلى MD4) لأسباب أمنية. استخدمت الإصدارات الأقدم من Webpack وبعض الأدوات الأخرى هذه الخوارزميات غير المدعومة الآن داخليًا (لتجزئة الوحدة النمطية). عند استدعاء الخوارزمية التي تمت إزالتها، يقوم OpenSSL 3 بطرح ERR_OSSL_EVP_UNSUPPORTED. إنها فجوة توافق بين الأدوات القديمة وOpenSSL الجديد.

أفضل حل: تحديث الأدوات الخاصة بك

# The real fix is updating the tool that uses the legacy algorithm.
# For Webpack (the most common cause):
npm install webpack@latest webpack-cli@latest

# Newer Webpack (5.61+) uses a supported hashing algorithm.
# Also update related tools:
npm install react-scripts@latest   # if using Create React App
npm update                          # update dependencies generally

يعد التحديث إلى إصدارات الأداة الحالية هو الحل المناسب – فهي تستخدم خوارزميات متوافقة مع OpenSSL 3. الحلول البديلة أدناه هي جسور مؤقتة عندما لا تتمكن من التحديث على الفور.

الحل البديل 1: علامة موفر OpenSSL القديم

# Set the NODE_OPTIONS environment variable to re-enable legacy algorithms

# macOS/Linux
export NODE_OPTIONS=--openssl-legacy-provider
npm run build

# Windows (Command Prompt)
set NODE_OPTIONS=--openssl-legacy-provider

# Windows (PowerShell)
$env:NODE_OPTIONS="--openssl-legacy-provider"

الحل البديل 2: في البرامج النصية package.json (عبر الأنظمة الأساسية)

// Add the flag directly to your scripts
{
  "scripts": {
    "build": "NODE_OPTIONS=--openssl-legacy-provider webpack",
    "start": "NODE_OPTIONS=--openssl-legacy-provider webpack serve"
  }
}

// For cross-platform (Windows + Unix), use cross-env:
// npm install --save-dev cross-env
{
  "scripts": {
    "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider webpack"
  }
}

الحل البديل 3: الرجوع إلى إصدار أقدم من Node.js (الملاذ الأخير)

# If updating tooling isn't possible, use an older Node version
# with OpenSSL 1.1 (Node 16 or earlier)

# With nvm:
nvm install 16
nvm use 16
npm run build

# This is a temporary measure - Node 16 is old. Prefer updating
# your tooling to work with modern Node/OpenSSL.

أي نهج تختار

الوضع أفضل نهج
يمكن تحديث التبعيات تحديث حزمة الويب/الأدوات (الإصلاح المناسب)
أحتاجها للعمل الآن، سيتم إصلاحها لاحقًا –openssl-legacy-provider flag
لا يمكن لمس التبعيات إشارة قديمة أو عقدة تخفيضية
مشروع قديم، لا يمكن التحديث عقدة الرجوع إلى إصدار أقدم (مؤقتة)

تعتبر علامة الموفر القديم بمثابة إزالة سريعة للحظر، ولكن إعادة تمكين الخوارزميات المهملة ليست مثالية على المدى الطويل. إعطاء الأولوية لتحديث الأدوات الخاصة بك عندما تستطيع.

التحقق من الإصدارات الخاصة بك

# Check your Node.js version (17+ has OpenSSL 3)
node --version

# Check OpenSSL version Node is using
node -e "console.log(process.versions.openssl)"
# 3.x.x means OpenSSL 3 (causes this error with old tools)

# Check Webpack version
npx webpack --version
# 5.61+ handles OpenSSL 3 correctly

الأسئلة المتداولة

س: ما الذي يسبب هذا الخطأ بالفعل؟
ج: يستخدم Node.js 17+ OpenSSL 3، الذي أزال دعم الخوارزميات القديمة (مثل التجزئة القديمة المستندة إلى MD4) التي تستخدمها إصدارات Webpack الأقدم داخليًا لتجزئة الوحدة النمطية. عندما تستدعي الأداة القديمة الخوارزمية التي تمت إزالتها، يقوم OpenSSL 3 بطرح ERR_OSSL_EVP_UNSUPPORTED. إنه عدم توافق بين الأدوات القديمة وOpenSSL الجديد.

س: هل علامة –openssl-legacy-provider آمنة؟
ج: يعمل على إعادة تمكين الخوارزميات المهملة التي تم تعطيلها لأسباب أمنية. إنه حل مؤقت جيد لإلغاء حظر البناء، ولكنه ليس مثاليًا على المدى الطويل. تفضل بتحديث أدواتك (Webpack) لاستخدام الخوارزميات الحديثة بدلاً من الاعتماد على العلامة القديمة إلى أجل غير مسمى.

س: لماذا يؤدي تحديث Webpack إلى إصلاح المشكلة؟
ج: تحول Webpack الأحدث (5.61+) إلى خوارزميات التجزئة المدعومة بواسطة OpenSSL 3، لذلك لم يعد يستدعي الخوارزمية القديمة التي تمت إزالتها. يعد تحديث أدوات البناء الخاصة بك إلى الإصدارات الحالية هو الحل المناسب – فهي متوافقة مع Node.js وOpenSSL الحديثين.

س: هل يجب عليّ الرجوع إلى إصدار Node.js القديم لإصلاح هذه المشكلة؟
ج: فقط كملاذ أخير إذا لم تتمكن من تحديث الأدوات. تتجنب العقدة 16 (OpenSSL 1.1) الخطأ ولكنها قديمة وغير مدعومة. من الأفضل تحديث أدواتك والبقاء على إصدار Node الحالي. إن تخفيض التصنيف هو جسر مؤقت وليس حلاً.

س: لقد قمت بتحديث Webpack ولكنني مازلت أتلقى الخطأ. لماذا؟
ج: قد تستخدم أداة أخرى في سلسلة البناء الخاصة بك الخوارزمية القديمة (نصوص التفاعل، والمحمل القديم، وما إلى ذلك). قم بتحديث جميع التبعيات المتعلقة بالبناء، واحذف وحدات العقدة وأعد تثبيتها. إذا استمرت المشكلة، استخدم العلامة القديمة مؤقتًا أثناء تحديد التبعية التي تحتاج إلى التحديث.

الخلاصة

يحدث ERR_OSSL_EVP_UNSUPPORTED (إجراءات المغلف الرقمي::غير مدعومة) عندما تستدعي الأدوات القديمة (عادةً Webpack) الخوارزميات القديمة التي أزالها OpenSSL 3 (المجمعة في Node 17+) لأغراض الأمان. الإصلاح المناسب هوتحديث الأدوات الخاصة بك (npm install webpack@latestوتبعيات البناء ذات الصلة) إلى الإصدارات التي تستخدم خوارزميات متوافقة مع OpenSSL 3. ولإلغاء الحظر المؤقت السريع، استخدم--openssl-legacy-provider العلم عبر NODE_OPTIONS (مع بيئة مشتركة للبرامج النصية عبر الأنظمة الأساسية)، ولكن تعامل معها كجسر، وليس كحل دائم. يعمل خفض مستوى Node.js ولكنه يبقيك على الإصدارات القديمة غير المدعومة. قم بإعطاء الأولوية لتحديث أدوات البناء الخاصة بك للعمل مع Node.js الحديثة – تعمل العلامة القديمة على إعادة تمكين الخوارزميات المهملة ولا ينبغي الاعتماد عليها على المدى الطويل.

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা