Windows पर Npm चलाते समय SSL प्रमाणपत्र त्रुटि कैसे ठीक करें?


88

जब मैं npm के साथ एक पैकेज स्थापित करने की कोशिश करता हूं, तो यह काम नहीं करता है। एक लंबे इंतजार के बाद, मुझे अंततः एक त्रुटि मिलती है 'टनलिंग सॉकेट स्थापित नहीं किया जा सकता है, sutatusCode = 403'।

$ npm install coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
npm ERR!     at ClientRequest.onConnect (c:\Program Files\nodejs\node_modules\npm\node_modules\request\tunnel.js:148:19)
npm ERR!     at ClientRequest.g (events.js:193:14)
npm ERR!     at ClientRequest.EventEmitter.emit (events.js:123:20)
npm ERR!     at Socket.socketOnData (http.js:1393:11)
npm ERR!     at TCP.onread (net.js:403:27)

हालाँकि, जब मैं अपने वेब ब्राउज़र (Google Chrome) में उसी URL को ब्राउज़ करता हूं तो यह ठीक लोड होता है (फुटनोट देखें)। https://registry.npmjs.org/coffee-script

क्या गलत हो रहा है?


जबकि मैं एक https प्रॉक्सी का उपयोग करने के लिए होता हूं, मुझे विश्वास है कि यह समस्या नहीं है। मैंने पर्यावरण चर https_proxy(एनपीएम उपयोगकर्ता गाइड के अनुसार ) को कॉन्फ़िगर किया है । मुझे पता है कि पर्यावरण चर सही है, क्योंकि पायथन पैकेज प्रबंधक pipइसे सही ढंग से अनुसरण करता है।

मेरा मानना ​​है कि समस्या एसएसएल प्रमाणपत्रों से संबंधित है, क्योंकि अगर मैं उस URL को डाउनलोड करता हूं, तो मुझे wgetप्रमाणपत्रों के बारे में स्पष्ट त्रुटि मिलती है

$ wget https://registry.npmjs.org/coffee-script
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2012-12-17 12:14:07--  https://registry.npmjs.org/coffee-script
Resolving corpproxy... 10.254.215.35
Connecting to corpproxy|10.254.215.35|:8080... connected.
ERROR: cannot verify registry.npmjs.org's certificate, issued by `/C=US/ST=CA/L=Oakland/O=npm/OU=npm Certificate Authority/CN=npmCA/emailAddress=i@izs.me':
  Unable to locally verify the issuer's authority.
To connect to registry.npmjs.org insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

मैं इसे कैसे ठीक करूं? सुरक्षा से समझौता किए बिना।


मैंने अपने वेब ब्राउजर में भी एसएसएल प्रमाणपत्र त्रुटियां प्राप्त कीं, जब तक कि मैंने नियंत्रण कक्ष के इंटरनेट विकल्प (स्क्रीनशॉट यहाँ छवि विवरण दर्ज करें) में 'विश्वसनीय रूट प्रमाणीकरण प्राधिकरण' के रूप में 'एनपीएमसीए' प्रमाणपत्र स्थापित नहीं किया।


संपादित करें: मैंने https://npmjs.org/doc/config.html#strict-ssl पर एक असुरक्षित वर्कअराउंड की कोशिश की

npm set strict-ssl false

फिर भी यह अभी भी एक ही त्रुटि के साथ बाहर है

$ npm install coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm ERR! Error: tunneling socket could not be established, sutatusCode=403


1
नमस्ते। यह भी देखें github.com/isaacs/npm/issues/2728
कर्नल पैनिक

1
"Npm सेट सख्त-एसएसएल झूठी" दर्ज करने से एक समस्या हल हो गई
MrD

जवाबों:


143

TL; DR - बस इसे चलाएं और अपनी सुरक्षा को अक्षम न करें:

मौजूदा अनाज बदलें

# Windows/MacOS/Linux 
npm config set cafile "<path to your certificate file>"

# Check the 'cafile'
npm config get cafile

या मौजूदा सीट्स का विस्तार करें

इस पर्यावरण चर को पूर्व-निर्धारित सीरों को विस्तारित करने के लिए सेट करें: NODE_EXTRA_CA_CERTSसे"<path to certificate file>"

पूरी कहानी

मुझे विंडोज के तहत एक कॉर्पोरेट फ़ायरवॉल के पीछे npm, पाइप, मावेन आदि के साथ काम करना है - यह मज़ेदार नहीं है। मैं कोशिश करूँगा और जहाँ संभव हो, इस मंच को अज्ञेयवादी / जागरूक रखूँगा।

HTTP_PROXY और HTTPS_PROXY

HTTP_PROXY& HTTPS_PROXYपर्यावरण वेरिएबल बहुत सारे सॉफ्टवेयर द्वारा उपयोग किया जाता है ताकि यह पता चल सके कि आपका प्रॉक्सी कहां है। विंडोज के तहत, बहुत सारे सॉफ्टवेयर आपके ओएस निर्दिष्ट प्रॉक्सी का भी उपयोग करते हैं जो एक पूरी तरह से अलग बात है। इसका मतलब है कि आपके पास क्रोम (जो आपके इंटरनेट विकल्पों में निर्दिष्ट प्रॉक्सी का उपयोग करता है) हो सकता है, यूआरएल को ठीक से जोड़ना, लेकिन एनपीएम, पाइप, मावेन आदि काम नहीं कर रहे हैं क्योंकि वे HTTPS_PROXY का उपयोग करते हैं (सिवाय इसके कि वे HTTP_PROXY का उपयोग करें (बाद में देखें)। आम तौर पर पर्यावरण चर कुछ इस तरह दिखेगा:

http://proxy.example.com:3128

लेकिन आपको एक 403 मिल रहा है जो बताता है कि आप अपने प्रॉक्सी के खिलाफ प्रमाणित नहीं हो रहे हैं। यदि यह प्रॉक्सी पर मूल प्रमाणीकरण है, तो आप पर्यावरण चर को फॉर्म के कुछ भाग में सेट करना चाहेंगे:

http://user:pass@proxy.example.com:3128

खूंखार NTLM

एक HTTP स्थिति कोड 407 (प्रॉक्सी प्रमाणीकरण आवश्यक है), जो यह कहने का अधिक सही तरीका है कि यह गंतव्य सर्वर के बजाय प्रॉक्सी है जो आपके अनुरोध को अस्वीकार कर रहा है। उस कोड ने मुझे सबसे लंबे समय तक तब तक परेशान किया जब तक कि Google पर बहुत समय के बाद, मैंने अपना प्रॉक्सी NTLM प्रमाणीकरण सीख लिया । HTTP मूल प्रमाणीकरण जो मेरे कॉर्पोरेट ओवरलोडर्स ने प्रॉक्सी को संतुष्ट करने के लिए पर्याप्त नहीं था। मैंने अपने स्थानीय मशीन ( अनअथेंटेड) पर Cntlm का उपयोग करने का सहारा लिया , फिर उसने अपस्ट्रीम प्रॉक्सी के साथ NTLM प्रमाणीकरण को संभाल लिया। है जो आम तौर पर स्थापित करने के रूप में सरल रूप में - तो मैं सभी कार्यक्रमों NTLM नहीं कर सका है कि प्रॉक्सी के रूप में अपने स्थानीय मशीन का उपयोग करने के बताने के लिए किया था HTTP_PROXYऔर HTTPS_PROXY। अन्यथा, npm उपयोग के लिए (जैसा कि @Agus से पता चलता है):

npm config set proxy http://proxy.example.com:3128
npm config set https-proxy http://proxy.example.com:3128

"हमें सभी HTTPS ट्रैफ़िक को डिक्रिप्ट करना होगा क्योंकि वायरस"

इसके बाद सेट-अप लगभग एक साल के लिए (क्लंकली) के साथ गुनगुनाया गया था, कॉर्पोरेट ओवरलोडर्स ने प्रॉक्सी को बदलने का फैसला किया। इतना ही नहीं, लेकिन यह अब NTLM का उपयोग नहीं करेगा! एक बहादुर नई दुनिया सुनिश्चित करने के लिए। लेकिन क्योंकि दुर्भावनापूर्ण सॉफ़्टवेयर के लेखक अब HTTPS के माध्यम से मैलवेयर डिलीवर कर रहे थे, वही एकमात्र तरीका जिससे हम गरीब निर्दोष उपयोगकर्ताओं की रक्षा कर सकते थे, वह खतरों के लिए स्कैन करने के लिए हर कनेक्शन को बीच में ही रोक देता था। जैसा कि आप कल्पना कर सकते हैं, मैं सुरक्षा की भावना से उबर गया था।

एक लंबी कहानी को छोटा करने के लिए, स्व-हस्ताक्षरित प्रमाणपत्र को बचने के लिए npm पर स्थापित करने की आवश्यकता है SELF_SIGNED_CERT_IN_CHAIN:

npm config set cafile "<path to certificate file>"

वैकल्पिक रूप से, NODE_EXTRA_CA_CERTSपर्यावरण चर को प्रमाण पत्र फ़ाइल में सेट किया जा सकता है।

मुझे लगता है कि वह सब कुछ है जो मुझे पता है कि प्रॉक्सी / फ़ायरवॉल के पीछे काम करने के लिए npm मिल रहा है। किसी को यह उपयोगी लग सकता है।

संपादित करें : इस समस्या के लिए HTTPS को HTTP रजिस्ट्री या सेटिंग का उपयोग करके बंद करना वास्तव में एक सामान्य सुझाव है NODE_TLS_REJECT_UNAUTHORIZED। ये अच्छे विचार नहीं हैं क्योंकि आप अपने आप को आगे के मध्य या पुनर्निर्देशन हमलों के लिए खोल रहे हैं। पैकेज इंस्टॉलेशन करने वाली मशीन पर आपके DNS रिकॉर्ड्स का एक त्वरित स्पूफ और आप कहीं से भी खुद को भरोसेमंद पैकेज पाएंगे। यह HTTPS काम करने के लिए बहुत काम की तरह लग सकता है, लेकिन यह अत्यधिक अनुशंसित है। जब आप कंपनी में अविश्वसनीय कोड की अनुमति देने के लिए जिम्मेदार हैं, तो आप समझेंगे कि क्यों।

संपादित करें 2 : ध्यान रखें कि सेटिंग npm config set cafile <path>npm का कारण केवल उस फ़ाइल में दिए गए सेर्ट्स का उपयोग करना है, इसके बजाय मौजूदा वाले को विस्तारित करना।

अगर आप मौजूदा वेरिएंट (जैसे कि कंपनी सर्टिफिकेट के साथ) का विस्तार करना चाहते हैं, NODE_EXTRA_CA_CERTSतो फाइल को लिंक करने के लिए पर्यावरण चर का उपयोग करने का तरीका है और यह आपको बहुत परेशानी से बचा सकता है। देखें कि कैसे-ऐड-कस्टम-सर्टिफिकेट-अथॉरिटी-सीए-टू-नोडज


9
विंडोज़ पर, मुझे फॉरवर्ड स्लैश का उपयोग करना पड़ा: npm config set Cafile "C: /dev/Firefox/mycert.cer"
जॉन यीशु

4
** समान संकेत के बिना= npm config set cafile "<path to your certificate file>"
मोती विंकलर

3
यह एक भयानक प्रतिक्रिया है - मैं प्रॉक्सी + zscalar के बारे में बेहतर ढंग से अपने खुद के सिरदर्द को संक्षेप में प्रस्तुत नहीं कर सका
Jpnh

7
के रूप में "आप कल्पना कर सकते हैं की वजह से इतनी मुश्किल से हँसे, मैं सुरक्षा की भावना के साथ दूर हो गया था।" :)
मारियो बी

3
मुझे प्रमाणपत्र फ़ाइल कैसे मिलेगी?
आदित्य

37

यह समस्या मेरे लिए रिपॉजिटरी के http संस्करण का उपयोग करके तय की गई थी:

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

54
यह बहुत बुरा समाधान है!
कीटी ओ

4
@ हाउ मैं अनुमान लगा रहा हूं कि इसका मतलब यह असुरक्षित है।
गाबियो

3
@KiTO यह एक बुरा समाधान है, सहमत। लेकिन जब मुझे सिर्फ कुछ पैकेजों को स्थापित करना है तो मुझे प्रमाणपत्र मुद्दों के साथ गड़बड़ क्यों करनी चाहिए?
इच

17
यह उत्तर सही है। कुछ मामले ऐसे होते हैं जब आप कॉर्पोरेट सर्टिफिकेट मेस के पीछे दूसरों के शीर्ष पर खुद के सर्टिफिकेट चेन के साथ होते हैं और इसके अलावा कोई और तरीका नहीं होता है (इसके अलावा सभी में सेर्स को अक्षम करने के अलावा) (विशेषकर जब वे आपको व्यवस्थापक अधिकार नहीं दे रहे हों)। यह npm बग की तरह लगता है जो सिस्टम से उचित सेटिंग्स को ठीक से लोड नहीं करता है। लेकिन क्रॉस-संगतता के लिए, वे एनपीएम को ठीक नहीं करेंगे, इसलिए यह इसका परिणाम है। जो लोग कहते हैं कि यह एक बुरा जवाब है, उन्हें पता नहीं है कि वे किस बारे में बात कर रहे हैं।
kenorb

3
@kenorb गलत है, आप अपने प्रॉक्सी द्वारा उठाए गए कदमों को वापस ले सकते हैं और उन स्व-हस्ताक्षरित समारोहों को कैफ़ाइल के साथ अपनी श्रृंखला में जोड़ सकते हैं।
दारोगा

15
npm config set strict-ssl false

मेरे लिए समस्या हल कर दी। इस मामले में मेरे एजेंट और विरूपण साक्ष्य डिपॉजिटरी, दोनों ही aws क्लाउड पर एक निजी सबनेट के पीछे हैं


यह समाधान उन सभी इंस्टाल के लिए ssl ऑफ सेट करेगा जो एक सुरक्षा जोखिम है। एनपीएम रजिस्ट्री सेट करना वास्तविक समाधान है एनपीएम कॉन्फ़िगरेशन सेट रजिस्ट्री रजिस्ट्री
अली

7

मैं एक ही मुद्दा रहा हूँ, मैं का उपयोग करने से उबरने

npm config set proxy http://my-proxy.com:1080
npm config set https-proxy http://my-proxy.com:1080

इसके अतिरिक्त नोड-डॉक पर जानकारी


6

मैं कुछ दिनों पहले इसी तरह की SSL समस्या का सामना करने के लिए हुआ था। समस्या यह है कि आपका npm https://registry.npmjs.org द्वारा उपयोग किए जाने वाले प्रमाणपत्र के लिए रूट प्रमाणपत्र सेट नहीं करता है ।

समाधान:

  1. wget https://registry.npmjs.org/coffee-script --ca-certificate=./DigiCertHighAssuranceEVRootCA.crtWget समस्या को ठीक करने के लिए उपयोग करें
  2. npm config set cafile /path/to/DigiCertHighAssuranceEVRootCA.crtअपने npm प्रोग्राम के लिए रूट प्रमाणपत्र सेट करने के लिए उपयोग करें ।

आप से रूट प्रमाणपत्र डाउनलोड कर सकते हैं: https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt

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

विश्लेषण:

चलो अपनी wget https://registry.npmjs.org/coffee-scriptसमस्या पहले ठीक करते हैं । आपका स्निपेट कहता है:

        त्रुटि: रजिस्ट्री सत्यापित नहीं कर सकती। pmpmjs.org का प्रमाण पत्र,
        / C = US / ST = CA / L = ओकलैंड / O = npm / OU = npm द्वारा जारी किया गया 
       प्रमाणपत्र प्राधिकरण / CN=npmCA/emailAddress=i@izs.me:
       जारीकर्ता के प्राधिकरण को स्थानीय रूप से सत्यापित करने में असमर्थ।

इसका अर्थ है कि आपका wget प्रोग्राम https://registry.npmjs.orgप्रमाणपत्र को सत्यापित नहीं कर सकता है । इस समस्या के दो कारण हो सकते हैं:

  1. आपके wget प्रोग्राम में इस डोमेन का मूल प्रमाणपत्र नहीं है। रूट प्रमाणपत्र आमतौर पर सिस्टम के साथ जहाज होता है।
  2. डोमेन अपने प्रमाणपत्र में रूट प्रमाणपत्र पैक नहीं करता है।

तो समाधान के लिए स्पष्ट रूप से रूट प्रमाणपत्र निर्धारित किया गया है https://registry.npmjs.org। हम ओपनसेल का उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि कारण bellow समस्या है।

openssl s_client -host registry.npmjs.org -port 443कमांड लाइन पर प्रयास करें और हमें यह संदेश मिलेगा (पहली कई लाइनें):

    जुड़े (00000003)
    गहराई = 1 / C = US / O = DigiCert Inc / OU = www.digicert.com / CN = DigiCert उच्च आश्वासन CA-3
    सत्यापन त्रुटि: संख्या = 20: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ
    सत्यापन सत्यापित करें: 0
    ---
    प्रमाणपत्र श्रृंखला
     0 s: / C = US / ST = कैलिफ़ोर्निया / L = सैन फ्रांसिस्को / O = तेज़ी से, Inc./CN=a.sni.fastly.net
       i: / C = US / O = DigiCert Inc / OU = www.digicert.com / CN = DigiCert उच्च आश्वासन CA-3
     1 s: / C = US / O = DigiCert Inc / OU = www.digicert.com / CN = DigiCert उच्च आश्वासन CA-3
       i: / C = US / O = DigiCert Inc / OU = www.digicert.com / CN = DigiCert उच्च आश्वासन EV रूट CA
    ---

यह पंक्ति यह verify error:num=20:unable to get local issuer certificateसुनिश्चित करती है कि https://registry.npmjs.orgरूट प्रमाणपत्र को पैक नहीं किया गया है। तो हम Google DigiCert High Assurance EV Root CAरूट प्रमाणपत्र।


Openssl X509 -inform डीईआर -outform पीईएम -इन DigiCertHighAssuranceEVRootCA.crt आउट DigiCertHighAssuranceEVRootCA.pem: यदि आप केवल (जेनकींस बनाता है के लिए की तरह) पाठ आधार फ़ाइल प्रदान कर सकते हैं, तो यह प्रमाणपत्र PEM में बदला जा सकता
Audrius Meskauskas

4

मैं एक ही मुद्दा रहा था। कुछ खुदाई के बाद मैंने महसूस किया कि कई पोस्ट / प्री-इंस्टॉल स्क्रिप्ट विभिन्न निर्भरताएं स्थापित करने की कोशिश करेंगे और कुछ समय विशिष्ट रिपॉजिटरी का उपयोग किया जाता है। एक बेहतर तरीका है कि मेरे लिए काम करने वाले नोडज के लिए https मॉड्यूल के लिए प्रमाणपत्र जांच को अक्षम करें।

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

इस सवाल से


2
जैसा कि पहले ही उल्लेख किया गया है, यह एसएसएल समस्या को ठीक नहीं करेगा , यह केवल इसे पास करेगा। इसे संबोधित करने का उचित तरीका उचित हस्ताक्षर प्रमाणपत्र पर भरोसा करने के लिए प्रत्येक पैकेज (गिट, एनपीएम, नोड) को ठीक से कॉन्फ़िगर करना है। यदि आप एक नकली प्रॉक्सी के पीछे हैं, तो कौर्स के।
आरोन सी

0

समस्या आपके प्रॉक्सी पर है। क्योंकि आपके इंस्टॉल पैकेज का स्थान प्रदाता अपना स्वयं का प्रमाण पत्र बनाता है और एक स्वीकृत प्राधिकारी से एक सत्यापित खरीद नहीं करता है, आपका प्रॉक्सी लक्षित होस्ट तक पहुंच की अनुमति नहीं देता है। मुझे लगता है कि आप क्रोम ब्राउज़र का उपयोग करते समय प्रॉक्सी को बायपास करते हैं। इसलिए कोई जाँच नहीं है।

इस समस्या के कुछ समाधान हैं। लेकिन सभी का मतलब है कि आप पैकेज प्रदाता पर भरोसा करते हैं।

संभव समाधान:

  1. जैसा कि अन्य उत्तरों में बताया गया है आप एक ऐसी http://पहुंच बना सकते हैं जो आपके प्रॉक्सी को बायपास कर सकती है। यह थोड़ा खतरनाक है, क्योंकि बीच का आदमी आपके डाउनलोड में मैलवेयर इंजेक्ट कर सकता है।
  2. wgetआप एक ध्वज का उपयोग करने का सुझाव देते हैं --no-check-certificate। यह आपके अनुरोध पर एक प्रॉक्सी निर्देश जोड़ देगा। प्रॉक्सी, अगर यह निर्देश को समझता है, तो यह नहीं देखता है कि क्या सर्वर प्रमाणपत्र एक प्राधिकरण द्वारा सत्यापित है और अनुरोध पारित करता है। शायद एनपीएम के साथ एक कॉन्फ़िगरेशन है जो कि विग ध्वज के समान है।
  3. आप CA npm को स्वीकार करने के लिए अपने प्रॉक्सी को कॉन्फ़िगर करते हैं। मैं आपके छद्म को नहीं जानता, इसलिए मैं आपको संकेत नहीं दे सकता।


0

यह वह है जो आप npm से बचने और विंडो मशीन में यार्न का उपयोग करने के लिए कर सकते हैं।

yarn config set "strict-ssl" false

0

यदि आप प्रॉक्सी सर्वर पर नियंत्रण रखते हैं या अपने आईटी प्रवेशों को मना सकते हैं, तो आप SSL निरीक्षण से रजिस्ट्री.npmjs.org को स्पष्ट रूप से बाहर करने का प्रयास कर सकते हैं। यह प्रॉक्सी सर्वर के उपयोगकर्ताओं को सख्त-एसएसएल जाँच को निष्क्रिय करने या नया रूट CA स्थापित करने से बचना चाहिए।

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