त्रुटित्रुटि:0308010सी:डिजिटल लिफाफा रूटीन::असमर्थित Node.js में (ERR_OSSL_EVP_UNSUPPORTED) आमतौर पर नए Node.js संस्करणों पर पुराने प्रोजेक्ट (अक्सर वेबपैक के साथ) बनाते समय दिखाई देता है। यह OpenSSL 3 द्वारा पुराने एल्गोरिदम के लिए समर्थन हटाने के कारण हुआ है। यहां बताया गया है कि इसे ठीक से कैसे ठीक किया जाए।
📋 Table of Contents
ऐसा क्यों होता है
Node.js 17+ OpenSSL 3 को बंडल करता है, जिसने सुरक्षा के लिए कुछ लीगेसी एल्गोरिदम (जैसे पुराने MD4-आधारित हैशिंग) को अक्षम कर दिया है। वेबपैक के पुराने संस्करण और कुछ अन्य टूल आंतरिक रूप से (मॉड्यूल हैशिंग के लिए) इन अब-असमर्थित एल्गोरिदम का उपयोग करते थे। जब वे हटाए गए एल्गोरिदम को कॉल करते हैं, तो OpenSSL 3 ERR_OSSL_EVP_UNSUPPORTED फेंकता है। यह पुराने टूलींग और नए ओपनएसएसएल के बीच अनुकूलता अंतर है।
सबसे अच्छा समाधान: अपनी टूलींग अपडेट करें
# 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
वर्तमान टूल संस्करणों को अपडेट करना उचित समाधान है – वे ओपनएसएसएल 3-संगत एल्गोरिदम का उपयोग करते हैं। जब आप तुरंत अपडेट नहीं कर सकते तो नीचे दिए गए समाधान अस्थायी पुल हैं।
समाधान 1: लीगेसी ओपनएसएसएल प्रदाता ध्वज
# 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: नोड.जेएस को डाउनग्रेड करें (अंतिम उपाय)
# 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-विरासत-प्रदाता ध्वज |
| निर्भरता को छू नहीं सकते | विरासत ध्वज या डाउनग्रेड नोड |
| पुराना प्रोजेक्ट, अद्यतन नहीं किया जा सकता | डाउनग्रेड नोड (अस्थायी) |
लीगेसी प्रदाता ध्वज एक त्वरित अनब्लॉक है, लेकिन अप्रचलित एल्गोरिदम को फिर से सक्षम करना आदर्श दीर्घकालिक नहीं है। जब भी संभव हो अपने टूलींग को अपडेट करने को प्राथमिकता दें।
आपके संस्करणों का सत्यापन
# 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-आधारित हैश की तरह) के लिए समर्थन हटा दिया है, जो पुराने वेबपैक संस्करण मॉड्यूल हैशिंग के लिए आंतरिक रूप से उपयोग करते थे। जब पुराना टूल हटाए गए एल्गोरिदम को कॉल करता है, तो OpenSSL 3 ERR_OSSL_EVP_UNSUPPORTED फेंकता है। यह पुराने टूलींग और नए ओपनएसएसएल के बीच असंगतता है।
प्रश्न: क्या –openssl-legacy-provider ध्वज सुरक्षित है?
उत्तर: यह उन अप्रचलित एल्गोरिदम को पुनः सक्षम करता है जिन्हें सुरक्षा कारणों से अक्षम कर दिया गया था। किसी बिल्ड को अनब्लॉक करने के लिए यह एक अच्छा अस्थायी समाधान है, लेकिन दीर्घकालिक के लिए आदर्श नहीं है। अनिश्चित काल तक विरासत ध्वज पर निर्भर रहने के बजाय आधुनिक एल्गोरिदम का उपयोग करने के लिए अपने टूलींग (वेबपैक) को अपडेट करना पसंद करें।
प्रश्न: वेबपैक को अपडेट करने से यह ठीक क्यों हो जाता है?
उ: नए वेबपैक (5.61+) ने ओपनएसएसएल 3 द्वारा समर्थित हैशिंग एल्गोरिदम पर स्विच किया है, इसलिए यह अब हटाए गए लीगेसी एल्गोरिदम को कॉल नहीं करता है। अपने बिल्ड टूलिंग को वर्तमान संस्करणों में अपडेट करना उचित समाधान है – वे आधुनिक Node.js और OpenSSL के साथ संगत हैं।
प्रश्न: क्या मुझे इसे ठीक करने के लिए Node.js को डाउनग्रेड करना चाहिए?
उ: केवल अंतिम उपाय के रूप में यदि आप टूलींग को अपडेट नहीं कर सकते हैं। नोड 16 (ओपनएसएसएल 1.1) त्रुटि से बचाता है लेकिन पुराना और असमर्थित है। अपने टूलींग को अपडेट करना और वर्तमान नोड संस्करण पर बने रहना बेहतर है। डाउनग्रेडिंग एक अस्थायी पुल है, कोई समाधान नहीं।
प्रश्न: मैंने वेबपैक को अपडेट किया लेकिन अभी भी त्रुटि मिल रही है। क्यों?
उ: आपकी बिल्ड श्रृंखला में एक अन्य उपकरण विरासत एल्गोरिथ्म (प्रतिक्रिया-स्क्रिप्ट, एक पुराना लोडर, आदि) का उपयोग कर सकता है। सभी बिल्ड-संबंधित निर्भरताएँ अपडेट करें, नोड_मॉड्यूल हटाएं और पुनः इंस्टॉल करें। यदि यह बनी रहती है, तो किस निर्भरता को अद्यतन करने की आवश्यकता है, इसकी पहचान करते समय अस्थायी रूप से विरासत ध्वज का उपयोग करें।
निष्कर्ष
ERR_OSSL_EVP_UNSUPPORTED (डिजिटल लिफ़ाफ़ा रूटीन::असमर्थित) तब होता है जब पुराने टूलिंग (आमतौर पर वेबपैक) लीगेसी एल्गोरिदम को कॉल करते हैं जिन्हें सुरक्षा के लिए OpenSSL 3 (नोड 17+ में बंडल) हटा दिया गया है। उचित निर्धारणहै अपने टूलींग को अपडेट करना ( और संबंधित बिल्ड निर्भरताएँ)npm install webpack@latest उन संस्करणों के लिए जो ओपनएसएसएल 3-संगत एल्गोरिदम का उपयोग करते हैं। त्वरित अस्थायी अनब्लॉक के रूप में,का उपयोग करें NODE_OPTIONS के माध्यम से ध्वजांकित करें--openssl-legacy-provider (क्रॉस-प्लेटफ़ॉर्म स्क्रिप्ट के लिए क्रॉस-एनवी के साथ), लेकिन इसे एक पुल के रूप में मानें, स्थायी समाधान के रूप में नहीं। Node.js को अपग्रेड करना काम करता है लेकिन आपको पुराने, असमर्थित संस्करणों पर रखता है। आधुनिक Node.js के साथ काम करने के लिए अपने बिल्ड टूल को अपडेट करने को प्राथमिकता दें – विरासत ध्वज अप्रचलित एल्गोरिदम को फिर से सक्षम करता है और इस पर लंबे समय तक भरोसा नहीं किया जाना चाहिए। (क्रॉस-प्लेटफ़ॉर्म स्क्रिप्ट के लिए क्रॉस-एनवी के साथ), लेकिन इसे एक पुल के रूप में मानें, स्थायी समाधान के रूप में नहीं। Node.js को अपग्रेड करना काम करता है लेकिन आपको पुराने, असमर्थित संस्करणों पर रखता है। आधुनिक Node.js के साथ काम करने के लिए अपने बिल्ड टूल को अपडेट करने को प्राथमिकता दें – विरासत ध्वज अप्रचलित एल्गोरिदम को फिर से सक्षम करता है और इस पर लंबे समय तक भरोसा नहीं किया जाना चाहिए।
🔗 Share this article
✍️ Leave a Comment