त्रुटि प्राप्त करना: npm का उपयोग करते समय 'त्रुटि: SSL त्रुटि: SELF_SIGNED_CERT_IN_CHAIN'


292

मैं ubuntu पर npm v1.0.104 / नोड 0.6.12 का उपयोग कर रहा हूं - मुझे npm के माध्यम से किसी भी नए मॉड्यूल को स्थापित करने का प्रयास करते समय नीचे दी गई त्रुटि प्राप्त हो रही है (मैंने पहले सॉकेट का परीक्षण किया था। मैं http का उपयोग कर रहा हूं, हालांकि https नहीं और सोच रहा हूं कि क्या हो सकता है npm / अहस्ताक्षरित certs) के साथ समस्या का परिणाम है। Npm ' https://registry.npmjs.org ' URL को हल करने का प्रयास करने के बाद त्रुटि पॉप अप हो जाती है । वहाँ वैसे भी मैं त्रुटि को अनदेखा कर सकता हूं या शायद npm का उपयोग जारी रखने के लिए किसी विश्वसनीय स्टोर में प्रमाण पत्र का पता लगा / जोड़ सकता हूं।

समस्या को हल करने के लिए क्या किया जाना चाहिए, इस पर किसी भी जानकारी की सराहना की जाएगी (यदि संभव हो तो फिर से स्थापित करने के लिए मैं कॉन्फ़िगरेशन के माध्यम से समस्या को हल करना पसंद करूंगा)।

त्रुटि: "त्रुटि: एसएसएल त्रुटि: SELF_SIGNED_CERT_IN_CHAIN"

पूर्ण संदेश:

npm ERR! Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/main.js:252:28)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at HTTPParser.onIncoming (http.js:1261:11)
npm ERR!     at HTTPParser.onHeadersComplete (http.js:102:31)
npm ERR!     at CleartextStream.ondata (http.js:1150:24)
npm ERR!     at CleartextStream._push (tls.js:375:27)
npm ERR!     at SecurePair.cycle (tls.js:734:20)
npm ERR!     at EncryptedStream.write (tls.js:130:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!     at Socket.emit (events.js:67:17)
npm ERR! Report this *entire* log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
npm ERR! 
npm ERR! System Linux 2.6.38-13-generic
npm ERR! command "node" "/usr/bin/npm" "install" "jed"
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.0.104

1
कठोर एसएसएल हटाओ। पर एक नज़र डालें stackoverflow.com/a/16534065
nolim1t

15
27 फरवरी, 2014 तक npm अब अपने स्व-हस्ताक्षरित प्रमाणपत्रों का समर्थन नहीं करता है। कृपया npm की ब्लॉग पोस्ट या हाल ही में अधिक जानकारी के लिए नीचे दिए गए उत्तर को देखें।
केविन रीली

1
यदि आप AWS इलास्टिक बीनस्टॉक पर इससे परेशान हैं, तो एक समाधान यहाँ उपलब्ध है: stackoverflow.com/questions/22096459/…
Guillaume Flandre

1
nolim1t : यह मुद्दे के कारण को संबोधित नहीं करता है, और केविन : ब्लॉग पोस्ट में आदेश अधूरे हैं। मेरे लिए काम करने वाले कमांड के लिए stackoverflow.com/a/22099006/106302 देखें ।
हम

1
@ali कृपया 'स्वीकृत उत्तर' को बदलें। यह समस्या npm अपग्रेड के कारण दिखाई दे रही है, और SSL के साथ कोई समस्या नहीं है। SSL को बंद करना BAD है, और विशेष रूप से चूंकि npm को अपडेट करने के लिए वर्तमान में सही प्रतिक्रिया है। केविन रेली का उत्तर स्वीकृत उत्तर होना चाहिए। धन्यवाद।
मिकज़्ज़क्स

जवाबों:


391

निम्नलिखित को चलाने से समस्या हल हो गई:

npm config set strict-ssl false

मैं इस पर कोई टिप्पणी नहीं कर सकता कि क्या यह इस समय किसी अन्य मुद्दे का कारण बनेगा। आशा करता हूँ की ये काम करेगा।


39
"npm config set ca null" के बजाय, ssl त्रुटियों को अनदेखा करना एक बुरा विचार है
alex

6
@SnowInferno SSL यह भी गारंटी देता है कि आप वास्तविक रजिस्ट्री से बात कर रहे हैं ।npmjs.org कोई संभावित रूप से दुर्भावनापूर्ण पैकेज स्थापित कर सकता है।
adotout

58
यह गंदी तरह से गलत है। यदि आप हर बार ऐसा करते हैं, तो आप SSL का उपयोग करने से क्यों परेशान हो रहे हैं? "किसी भी समय एक त्रुटि की अनदेखी करने से सफलता मिलती है, डेवलपर्स बस यही करने जा रहे हैं।"
djechlin

20
कृपया ssl मुद्दों को अनदेखा न करें, क्योंकि त्रुटि एक बहुत अच्छे कारण के लिए है। इसके अलावा, खोज का एक छोटा सा हिस्सा निम्नलिखित ट्वीट के परिणामस्वरूप हुआ, जो आपकी समस्या के आधिकारिक समाधान के लिए लिंक करता है (अपडेट npm): twitter.com/npmjs/status/439279809307242496
थॉमस Vervest

41
मेरा मुद्दा एक प्रॉक्सी के कारण था कि मैं पीछे हूं, "npm config set ca null" और 'npm config set ca "" "अभी भी मुझे वही त्रुटि दी गई, लेकिन SSL को हटाने पर पूरी तरह से काम हुआ। कभी-कभी अच्छा अभ्यास उतना महत्वपूर्ण नहीं होता जितना कि वास्तव में काम करता है।
कोरी शुल्ज

220

27 फरवरी, 2014 तक, npm अब अपने स्व-हस्ताक्षरित प्रमाणपत्रों का समर्थन नहीं करता हैनिम्नलिखित विकल्प, जैसा कि npm द्वारा अनुशंसित है, निम्न में से एक करना है:

Npm के अपने संस्करण को अपग्रेड करें

npm install npm -g --ca=""

- या

ज्ञात रजिस्ट्रार का उपयोग करने के लिए npm के अपने वर्तमान संस्करण को बताएं

npm config set ca ""

अपडेट: npm ने SELF_SIGNED_CERT_IN_CHAIN ​​और npm के साथ और अधिक समाधानों के साथ और अधिक वातावरण के लिए और अधिक सहायता पोस्ट की है



आपको sudoसिफारिशों के बारे में बताने की आवश्यकता हो सकती है या नहीं ।


अन्य विकल्प

ऐसा लगता है कि लोगों को एनपीएम की सिफारिशों का उपयोग करने में समस्या हो रही है, इसलिए यहां कुछ अन्य संभावित समाधान हैं।

अपग्रेड नोड स्वयं
यह त्रुटि प्राप्त करने का सुझाव दे सकता है कि आपके पास नोड का एक पुराना संस्करण है, जो स्वाभाविक रूप से एनपीएम के पुराने संस्करण के साथ आता है। एक उपाय यह है कि अपने नोड के संस्करण को अपग्रेड किया जाए। यह संभवतः सबसे अच्छा विकल्प है क्योंकि यह आपको अद्यतित करता है और मौजूदा बग और कमजोरियों को ठीक करता है।

यहां प्रक्रिया इस बात पर निर्भर करती है कि आपने नोड को कैसे स्थापित किया है, आपका ऑपरेटिंग सिस्टम, और अन्यथा।

एनपीएम अपडेट करें
कि installपैकेज के लिए प्रयास करते समय आप शायद यहां पहुंचे , यह संभव है कि npm install npm -gएक ही त्रुटि के साथ विफल हो सकता है। यदि ऐसा है, तो updateइसके बजाय उपयोग करें । निसंत सोजन द्वारा सुझाए गए अनुसार:

npm update npm -g

एनपीएम विकल्प को अपडेट
करें अंतर्निहित मुद्दे के आसपास एक तरीका ज्ञात रजिस्ट्रारों का उपयोग करना, स्थापित करना और फिर ज्ञात रजिस्ट्रारों का उपयोग करना बंद करना है। जैसा कि जेनिलेन द्वारा सुझाया गया है:

npm config set ca ""
npm install npm -g
npm config delete ca

10
सबसे आसान समाधान शायद नोड्स के नवीनतम संस्करण को स्वयं डाउनलोड करना है, इसमें एनपीएम का एक नया संस्करण शामिल है जहां यह समस्या हल हो गई है। ऊपर दिए गए किसी भी आदेश ने मेरे लिए काम नहीं किया।
स्ट्रेल

1
मैं इस समाधान के साथ जाता हूं क्योंकि यह पहले से ही ssl को अनदेखा नहीं कर रहा है (या तो चेक को झूठा स्थापित करने या http के बजाय http का उपयोग करके)। धन्यवाद!
एचसीपी

12
npm स्थापित करें npm -g मुझे भी त्रुटि प्रदान करता है SELF_SIGNED_CERT_IN_CHAIN
एंडर्स

3
यदि यह काम नहीं करता है, तो npm config set ca ""पहले करें, फिर अपग्रेड करें, फिर कॉन्फ़िगरेशन बदलें। देखें: stackoverflow.com/a/22099006/106302
हम सभी मोनिका

1
@Redsandro sudoउपयोगकर्ता को बदल देता है, -gध्वज सेट करता है यदि उस उपयोगकर्ता के लिए वैश्विक रूप से या केवल स्थानीय में स्थापित करने के लिए node_modules
राडार

68

अभी के लिए मैंने सिर्फ https से http तक रजिस्ट्री URL स्विच किया है। ऐशे ही:

npm config set registry="http://registry.npmjs.org/"

1
मेरे लिए एक जादू की तरह काम किया। मैं मूल सीए को खोना नहीं चाहता था या एसएसएल त्रुटियों को अनदेखा करने के लिए मजबूर नहीं करता था।
स्नोइन्फोर्नो

पूरी तरह से काम किया। धन्यवाद!
मुहम्मद तुलसी

13
सुरक्षा अक्षम करना समाधान नहीं हो सकता है!
एलेसेंड्रो पेज़ेटो

1
मैंने पहले इसका उपयोग किया था, लेकिन किसी कारण से इसे 'http: //' से वापस 'https: //' पर वापस ले जाने से मेरा काम फिर से शुरू हो गया।
क्षीरवे

अन्य सभी समाधानों की कोशिश करने के बाद, मेरे लिए यह काम आखिरकार :-)
स्वप्निल कडु

49
npm config set strict-ssl false -g

इसे विश्व स्तर पर बचाने के लिए


ऐसा करने से मुझे कुख्यात cb() never called!npm त्रुटि मिलती है
जेरेमी

इस सेटिंग के बाद, मैं त्रुटि npm ERR से नीचे जा रहा हूँ! कोड E401 npm ERR! प्रमाणित करने में असमर्थ, आवश्यकता: वार्ता, NTLM npm ERR! इस रन का पूरा लॉग इन पाया जा सकता है: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
शमी कुरैशी

31

आपको npm को अपग्रेड करना होगा।

// Do this first, or the upgrade will fail
npm config set ca ""

npm install npm -g

// Undo the previous config change
npm config delete ca

आपको उन आदेशों के साथ उपसर्ग करने की आवश्यकता हो सकती है sudo

स्रोत: http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more


@ ओलिवर साल्ज़बर्ग: पुनः। आपका संपादन: OS XI पर नहीं लगता sudoहै कि यह सब आवश्यक है, और मेरे लिए केवल sudoठीक काम के साथ उन्नयन कमांड को उपसर्ग कर रहा है। YMMV।
हम

आह, यह मेरे लिए काम किया। कॉन्फ़िगरेशन को पूर्ववत करने के विशिष्ट निर्देशों के लिए धन्यवाद (इसलिए मुझे इसे स्वयं खोदना नहीं था)!
मैट

दिलचस्प। मैंने केवल डेबियन सर्वर पर इसका परीक्षण करने के बाद संपादन किया। मुझे हालांकि वर्तमान संशोधन पसंद है;)
डेर होकस्टापलर

उबंटू / डेबियन को अतिरिक्त लिंकिंग की आवश्यकता है, नीचे मेरा जवाब देखें।
Redsandro

2
यह स्वीकृत समाधान होना चाहिए। यह सुरक्षा को अक्षम नहीं करता है और npm ब्लॉग में "आधिकारिक" समाधान है।
एलेसैंड्रो पेज़ेटो

21

त्रुटि का SELF_SIGNED_CERT_IN_CHAINमतलब है कि आपके पास प्रमाणपत्र श्रृंखला में स्वयं हस्ताक्षरित प्रमाण पत्र है जो मूल रूप से सिस्टम द्वारा विश्वसनीय नहीं है।

यदि ऐसा होता है, तो मूल रूप से कुछ गड़बड़ चल रहा है, इसलिए जैसा कि लोगों ने पहले ही टिप्पणी की थी, यह केवल प्रमाणपत्र जांच को अक्षम करने के लिए अनुशंसित नहीं है, लेकिन बेहतर दृष्टिकोण यह समझना है कि समस्या क्या है और इसके कारण को ठीक करें।

यह शायद संबंधित है:

  • कस्टम रिपॉजिटरी पता जिसके पास सही प्रमाणपत्र नहीं है,

  • पारदर्शी प्रॉक्सी के साथ एक कॉर्पोरेट नेटवर्क।

    यदि आप एक कॉर्पोरेट वेब प्रॉक्सी के पीछे हैं, तो आपको उचित HTTP_PROXY/ HTTPS_PROXYपर्यावरण चर सेट करना चाहिए या उनके माध्यम से सेट करना चाहिए npm:

    npm config set proxy http://proxy.company.com:8080
    npm config set https-proxy http://proxy.company.com:8080

    देखें: कॉर्पोरेट वेब प्रॉक्सी के पीछे Node.js और Npm को कैसे सेटअप करें

यदि आप मेजबान पर भरोसा करते हैं, तो आप श्रृंखला से स्व-हस्ताक्षरित प्रमाणपत्र निर्यात कर सकते हैं और उन्हें सिस्टम में आयात कर सकते हैं, इसलिए उन्हें विश्वसनीय के रूप में चिह्नित किया गया है।

यह प्रमाण पत्रों की जांच करके प्राप्त किया जा सकता है ( example.comnpm रेपो में परिवर्तन जो कि विफल रहा है npm-debug.log):

openssl s_client -showcerts -connect example.com:443 < /dev/null

तो प्रमाण पत्र सामग्री (के बीच बचाने BEGINऔर END) में .crtहै ताकि इसे आयात करने के लिए फ़ाइल।

लिनक्स

सुझाव के अनुसार , आप /etc/environmentफ़ाइल में निर्यात प्रमाण पत्र जोड़ सकते हैं (नोड 7.4+), जैसे:

NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCer‌​ts.pem

CentOS

CentOS 5 पर इसे /etc/pki/tls/certs/ca-bundle.crtफ़ाइल में जोड़ा जा सकता है , जैसे

ex +'g/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq | sudo tee -a /etc/pki/tls/certs/ca-bundle.crt
sudo update-ca-trust force-enable
sudo update-ca-trust extract
npm install

नोट: केवल पहले प्रमाण पत्र को निर्यात करने के लिए, gशुरुआत में निकालें ।

CentOS 6 में, प्रमाणपत्र फ़ाइल की प्रतिलिपि बनाई जा सकती है /etc/pki/ca-trust/source/anchors/

Ubuntu / डेबियन

उबंटू / डेबियन में, CRT फ़ाइल को /usr/local/share/ca-certificates/ तब चलाने के लिए कॉपी करें :

sudo update-ca-certificates

मैक ओ एस

MacOS में आप चला सकते हैं:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/foo.crt

खिड़कियाँ

विंडोज में: certutil -addstore -f "ROOT" new-root-certificate.crt


इसे भी देखें: npm - समस्या निवारण - SSL त्रुटि


1
> अगर ऐसा है, तो आपको चेन से स्व-हस्ताक्षरित प्रमाण पत्र को निर्यात करने और उन्हें सिस्टम में आयात करने की आवश्यकता है, इसलिए उन्हें विश्वसनीय के रूप में चिह्नित किया गया है। - मेरे लिए चाल बनाता है।
dmi3y

2
महान! यह NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem को / etc / वातावरण में जोड़ने में भी मदद करता है। नोड 7.4+ इसे ध्यान में रखता है
ph4r05

9

यह काम करने से पहले लगता है NODE_TLS_REJECT_UNAUTHORIZED=0। उदाहरण के लिए:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

यह पता लगाना सबसे अच्छा होगा कि नोड को स्व-हस्ताक्षरित प्रमाण पत्र के रूप में वैध कैसे बनाया जाए। ऊपर दिए गए सख्त-एसएसएल सुझाव मेरे लिए किसी कारण से काम नहीं आए। यदि आप सुरक्षा निहितार्थों को समझते हैं और एक अस्थायी त्वरित सुधार की आवश्यकता है, तो यही मैंने त्रुटि के Google खोज के दौरान कुछ यादृच्छिक गितुब मुद्दों में पाया ।


1
विंडोज़ के लिए, "सेट NODE_TLS_REJECT_UNAUTHORIZED = 0" का उपयोग करें। और फिर एक आकर्षण की तरह काम करता है !!
तरुण

8

रिपॉजिटरी अब स्व-हस्ताक्षरित प्रमाण पत्र का समर्थन नहीं करता है। आपको अपग्रेड करने की आवश्यकता है npm

// Disable the certificate temporarily in order to do the upgrade
npm config set ca ""

// Upgrade npm. -g (global) means you need root permissions; be root 
// or prepend `sudo`
sudo npm install npm -g

// Undo the previous config change
npm config delete ca

// For Ubuntu/Debian-sid/Mint, node package is renamed to nodejs which 
// npm cannot find. Fix this:
sudo ln -s /usr/bin/nodejs /usr/bin/node

अद्यतन का उपयोग करने के लिए आपको एक नया टर्मिनल सत्र खोलने की आवश्यकता है npm

स्रोत: यह मूल रूप से jnylen के उत्तर पर एक संपादन था । हालांकि दिशानिर्देश कहते हैं, "हम सभी रचनात्मक संपादन का स्वागत करते हैं, लेकिन कृपया उन्हें पर्याप्त रूप से तैयार करें," इस पोस्ट को मूल पोस्ट में बहुत अधिक परिवर्तन होने के कारण "यह संपादन बदल गया है, क्योंकि मूल अर्थ या इरादे खो जाएगा।" मुझे लगता है कि समुदाय एक अलग जवाब पसंद करता है।


इसने मेरे लिए काम किया। हालाँकि मुझे अंतिम आदेश की आवश्यकता नहीं थी sudo ln -s /usr/bin/nodejs /usr/bin/node:।
अनुपस्थित

1
यह शायद इस बात पर निर्भर करता है कि क्या आपने आधिकारिक उबंटू रिपॉजिटरी, एक थर्ड पार्टी रिपॉजिटरी (एक नए संस्करण के लिए) से स्थापित किया है, या खुद को संकलित किया है (नवीनतम संस्करण के लिए)।
Redsandro

7

जो एक ही मुद्दे के साथ एक मैक पर और homebrew के माध्यम से npm स्थापित :

brew uninstall npm

फिर

brew install npm

मेरे लिए osx पर काम करता है (10.9.1)

संपादित करें : आपको brew updatenpm स्थापित करने से पहले आवश्यकता हो सकती है । आप brew upgradehomebrew को अपडेट करने के बाद भी कर सकते हैं । brew doctorयदि आप किसी अन्य समस्या में भाग लेते हैं तो भी इसे चलाने में मदद मिल सकती है ।


4

क्विक एंड क्लीन सॉल्यूशन (लिनेक्स का परीक्षण) (फेटिडिक के बाद 27 फरवरी, 2014)


Npm को अनइंस्टॉल करें

npm rm npm -g

Npm स्थापित करें ( npmjs.org के बजाय नया URL www.npmjs.org है )

curl https://www.npmjs.org/install.sh | sh

टिप : linux https://stackoverflow.com/a/22099363/333061 में node.js कैसे स्थापित करें


पुनर्निर्देशित 301 के कारण कमांड अब और काम नहीं करता है, लेकिन आप अभी भी https://www.npmjs.org/install.shअपने ब्राउज़र में टाइप कर सकते हैं और इसे मैन्युअल रूप से चलाने से पहले डाउनलोड कर सकते हैं ।
21


पिछली curl https://npmjs.org/install.shकमांड इस कारण पुनर्निर्देशित हो रही है https://www.npmjs.org/install.shकि क्यों curl https://www.npmjs.org/install.sh | shसीमलेस काम करता है। थोड़ा पैदावन पर अब से स्थापित करने के लिए ठीक है। :)
इगोर पारा

2

एनपीएम की स्थापना रद्द करें और इसे फिर से स्थापित करें।

27 फरवरी, 2014 तक npm अब अपने स्व-हस्ताक्षरित प्रमाणपत्रों का समर्थन नहीं करता है। http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more

उपरोक्त लिंक एनपीएम का उपयोग करते हुए एनपीएम को अपग्रेड करने का सुझाव देता है। यह SELF_SIGNED_CERT_IN_CHAIN ​​के साथ भी विफल होता है ...


2

SSL को बंद करना एक बुरा विचार जैसा लगता है। npm के ब्लॉग बताते हैं कि वे अब अपने स्व-हस्ताक्षरित प्रमाण पत्र का समर्थन नहीं करते हैं। वे सुझाव देते हैं कि npm को अपग्रेड करें npm install npm -g, लेकिन मुझे निश्चित रूप से वही SELF_SIGNED_CERT_IN_CHAIN ​​त्रुटि मिली। इसलिए मैंने सिर्फ नोड को अपडेट किया, जिसने इसके साथ ही एनपीएम को भी अपडेट किया। सटीक प्रक्रिया इस बात पर निर्भर करती है कि आपने पहली बार में नोड कैसे स्थापित किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.