ได้รับข้อผิดพลาด: 'ข้อผิดพลาด: ข้อผิดพลาด SSL: SELF_SIGNED_CERT_IN_CHAIN' ขณะใช้ npm


292

ฉันใช้ npm v1.0.104 / node 0.6.12 บน ubuntu - ฉันได้รับข้อผิดพลาดที่ถูกคัดลอกด้านล่างขณะที่พยายามติดตั้งโมดูลใหม่ผ่าน npm (ฉันทดสอบ socket.io ก่อนหน้านี้โดยใช้ http ไม่ใช่ https แต่ฉันสงสัยว่าจะเป็นไปได้ไหม ทำให้เกิดปัญหากับ npm / certs ที่ไม่ได้ลงชื่อ) ข้อผิดพลาดจะปรากฏขึ้นเมื่อ npm พยายามแก้ไขURL ' https://registry.npmjs.org ' มีอยู่แล้วฉันสามารถละเว้นข้อผิดพลาดหรืออาจค้นหา / เพิ่มใบรับรองไปยังร้านค้าที่เชื่อถือได้เพื่อใช้งานต่อไป

มีความเข้าใจในสิ่งที่ต้องทำเพื่อแก้ไขปัญหาจะได้รับการชื่นชม (ฉันต้องการแก้ไขปัญหาผ่านการกำหนดค่าซึ่งต่างจากการติดตั้งใหม่หากเป็นไปได้)

ข้อผิดพลาด: "ข้อผิดพลาด: ข้อผิดพลาด SSL: 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
อย่าลบ SSL ที่เข้มงวด ดูstackoverflow.com/a/16534065
nolim1t

15
ตั้งแต่วันที่ 27 กุมภาพันธ์ 2014 npm ไม่รองรับใบรับรองที่ลงชื่อด้วยตนเองอีกต่อไป โปรดดูโพสต์บล็อกของ npmหรือคำตอบล่าสุดด้านล่างสำหรับข้อมูลเพิ่มเติม
Kevin Reilly

1
ในกรณีที่คุณมีปัญหากับ AWS Elastic Beanstalk สามารถหาวิธีแก้ไขได้ที่นี่: stackoverflow.com/questions/22096459/…
Guillaume Flandre

1
nolim1t : นี่ไม่ได้ระบุสาเหตุของปัญหาและKevin : คำสั่งในโพสต์บล็อกไม่สมบูรณ์ ดูstackoverflow.com/a/22099006/106302สำหรับคำสั่งที่ใช้งานได้สำหรับฉัน
พวกเราทุกคนเป็นโมนิก้า

1
@ali โปรดเปลี่ยน 'คำตอบที่ยอมรับ' ปัญหานี้ปรากฏขึ้นเนื่องจากการอัปเกรด npm และไม่ใช่ปัญหาของ SSL การปิด SSL คือ BAD และโดยเฉพาะอย่างยิ่งเนื่องจากการตอบสนองที่ถูกต้องในปัจจุบันคือการปรับปรุง npm คำตอบของ Kevin Reilly ควรเป็นคำตอบที่ได้รับการยอมรับ ขอบคุณ.
Mikezx6r

คำตอบ:


391

การเรียกใช้สิ่งต่อไปนี้ช่วยแก้ไขปัญหาได้:

npm config set strict-ssl false

ฉันไม่สามารถแสดงความคิดเห็นว่าจะทำให้เกิดปัญหาอื่น ๆ ณ เวลานี้หรือไม่ หวังว่ามันจะช่วย


39
เรียกใช้ "NPM การตั้งค่าชุด CA null" แทนโดยไม่สนใจข้อผิดพลาด SSL เป็นความคิดที่ไม่ดี
อเล็กซ์

6
@SnowInferno SSL ยังรับประกันว่าคุณกำลังพูดคุยกับรีจิสทรีจริง npmjs.org บางคนอาจติดตั้งแพคเกจที่เป็นอันตราย
adotout

58
นี่เป็นความผิดที่โสโครก ทำไมคุณถึงรบกวนการใช้ SSL ทุกครั้งที่ทำสิ่งเดียวที่ควรปิด "เมื่อใดก็ตามที่ละเลยข้อผิดพลาดจะนำไปสู่ความสำเร็จนักพัฒนาจะทำเช่นนั้น"
djechlin

20
โปรดอย่าเพิกเฉยปัญหา ssl เนื่องจากข้อผิดพลาดอยู่ที่นั่นด้วยเหตุผลที่ดีมาก นอกจากนี้การค้นหาเล็กน้อยส่งผลให้ทวีตต่อไปนี้ซึ่งเชื่อมโยงไปยังวิธีแก้ปัญหาอย่างเป็นทางการสำหรับปัญหาของคุณ (อัปเดต npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest

41
ปัญหาของฉันเกิดจากพร็อกซีที่ฉันใช้งานอยู่ "npm config set ca null" และ 'npm config set ca ""' ยังให้ข้อผิดพลาดเดิมกับฉัน แต่การลบ SSL ทำงานได้อย่างสมบูรณ์ บางครั้งการฝึกฝนที่ดีนั้นไม่สำคัญเท่าที่ใช้
Cory Schulz

220

ในฐานะที่เป็นวันที่ 27 กุมภาพันธ์ 2014 NPM ไม่สนับสนุนใบรับรองลงนามด้วยตนเองของ ตัวเลือกต่อไปนี้ตามที่แนะนำโดย npm จะต้องทำอย่างใดอย่างหนึ่งต่อไปนี้:

อัปเกรดรุ่น npm ของคุณ

npm install npm -g --ca=""

-- หรือ --

บอก npm เวอร์ชันปัจจุบันของคุณเพื่อใช้ registrars ที่รู้จัก

npm config set ca ""

อัปเดต: npm ได้โพสต์ความช่วยเหลือเพิ่มเติมกับ SELF_SIGNED_CERT_IN_CHAIN ​​และ npmพร้อมโซลูชันเพิ่มเติมสำหรับสภาพแวดล้อมที่แตกต่างกัน



คุณอาจจะหรืออาจไม่จำเป็นต้องเสริมsudoคำแนะนำ


ตัวเลือกอื่น

ดูเหมือนว่าผู้คนกำลังมีปัญหาในการใช้คำแนะนำของ npm ดังนั้นนี่คือวิธีแก้ปัญหาอื่น ๆ

อัพเกรดโหนดเองการ
รับข้อผิดพลาดนี้อาจแนะนำให้คุณมีโหนดเวอร์ชันเก่ากว่าซึ่งโดยธรรมชาติจะมาพร้อมกับเวอร์ชันเก่ากว่าของ npm ทางออกหนึ่งคือการอัพเกรด Node เวอร์ชันของคุณ นี่เป็นตัวเลือกที่ดีที่สุดเพราะจะทำให้คุณได้รับข้อมูลล่าสุดและแก้ไขข้อบกพร่องและช่องโหว่ที่มีอยู่

กระบวนการที่นี่ขึ้นอยู่กับวิธีที่คุณติดตั้งโหนดระบบปฏิบัติการของคุณและอื่น ๆ

Update npm
เนื่องจากคุณอาจมาที่นี่ในขณะที่พยายามinstallทำแพ็คเกจเป็นไปได้ที่npm install npm -gอาจล้มเหลวด้วยข้อผิดพลาดเดียวกัน หากเป็นกรณีนี้ให้ใช้updateแทน ตามที่แนะนำโดย Nisanth Sojan:

npm update npm -g

อัปเดตทางเลือก npm
วิธีหนึ่งในการแก้ไขปัญหาพื้นฐานคือการใช้ registrars ที่รู้จักติดตั้งแล้วหยุดใช้ registrars ที่รู้จัก ตามที่แนะนำโดย jnylen:

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

10
ทางออกที่ง่ายที่สุดน่าจะดาวน์โหลด Nodejs เวอร์ชันล่าสุดเองซึ่งจะรวม npm เวอร์ชันใหม่ซึ่งปัญหานี้ได้รับการแก้ไข คำสั่งข้างต้นไม่เหมาะสำหรับฉัน
Strille

1
ฉันไปกับวิธีแก้ปัญหานี้เพราะมันเป็นคนแรกที่ไม่สนใจ ssl (โดยการตั้งค่าเช็คเป็น false ใน config หรือใช้ http แทน) ขอบคุณ!
hcpl

12
การติดตั้ง npm npm -g ยังทำให้ฉันมีข้อผิดพลาดอีกด้วย SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm

3
หากวิธีนี้ใช้ไม่ได้ให้ทำnpm config set ca ""ก่อนจากนั้นอัปเกรดแล้วเลิกทำการเปลี่ยนแปลงการกำหนดค่า ดู: stackoverflow.com/a/22099006/106302
We Are All Monica

1
@Redsandro sudoเปลี่ยนผู้ใช้-gตั้งค่าสถานะหากต้องการติดตั้งร่วมกันสำหรับผู้ใช้node_modulesนั้น
Radek

68

ตอนนี้ฉันเพิ่งเปลี่ยน URL รีจิสตรีจาก https เป็น http แบบนี้:

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

1
ทำงานเหมือนเสน่ห์สำหรับฉัน ฉันไม่ต้องการเสีย CA ดั้งเดิมหรือบังคับให้ละเว้นข้อผิดพลาด SSL
SnowInferno

ทำงานได้อย่างสมบูรณ์แบบ ขอบคุณ!
muhammed basil

13
การปิดใช้งานความปลอดภัยไม่สามารถแก้ปัญหาได้!
Alessandro Pezzato

1
ก่อนหน้านี้ฉันเคยใช้สิ่งนี้ แต่ด้วยเหตุผลบางประการการเปลี่ยนกลับเป็น 'https: //' จาก 'http: //' ทำให้ฉันทำงานได้อีกครั้ง
kshreve

หลังจากลองใช้วิธีแก้ปัญหาอื่นทั้งหมดแล้วงานนี้สำหรับฉันในที่สุด :-)
Swapnil Kadu

49
npm config set strict-ssl false -g

เพื่อบันทึกทั่วโลก


การทำเช่นนี้ทำให้ฉันเกิดcb() never called!ข้อผิดพลาดที่น่ารำคาญในการตรวจสอบ
Jeremy

หลังจากการตั้งค่านี้ฉัน geeting ด้านล่างข้อผิดพลาด npm ERR! รหัส E401 npm ข้อผิดพลาด! ไม่สามารถตรวจสอบสิทธิ์ต้องการ: เจรจาต่อรอง NTLM npm ERR! บันทึกที่สมบูรณ์ของการทำงานนี้สามารถพบได้ใน: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi

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


@Oliver Salzburg: อีกครั้ง การแก้ไขของคุณ: บน OS XI ไม่คิดว่าsudoจำเป็นเลยและมีเพียงคำนำหน้าคำสั่งอัพเกรดที่ใช้ได้sudoดีสำหรับฉัน YMMV
พวกเราทุกคนเป็นโมนิก้า

อ่าสิ่งนี้ใช้ได้กับฉัน ขอบคุณสำหรับคำแนะนำเฉพาะในการเลิกทำการเปลี่ยนแปลงการตั้งค่า (ดังนั้นฉันไม่ต้องขุดเอง)!
Matt

น่าสนใจ ฉันทำการแก้ไขหลังจากทดสอบบนเซิร์ฟเวอร์ Debian เท่านั้น ฉันชอบการแก้ไขในปัจจุบัน แต่)
Der Hochstapler

Ubuntu / Debian ต้องการการเชื่อมโยงเพิ่มเติมดูคำตอบของฉันด้านล่าง
Redsandro

2
นี่ควรเป็นทางออกที่ยอมรับได้ สิ่งนี้ไม่ได้ปิดใช้งานการรักษาความปลอดภัยและเป็นโซลูชัน "เป็นทางการ" ที่ได้รับการออกแบบในบล็อก npm
Alessandro Pezzato

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.comเป็นเอ็นพีพี repo ซึ่งล้มเหลวขึ้นอยู่กับ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/แฟ้มใบรับรองสามารถคัดลอกไป

อูบุนตู / Debian

ใน Ubuntu / Debian ให้คัดลอกไฟล์ CRT ไปที่/usr/local/share/ca-certificates/ รันแล้ว:

sudo update-ca-certificates

MacOS

ใน macOS คุณสามารถเรียกใช้:

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

ของ windows

ใน Windows: certutil -addstore -f "ROOT" new-root-certificate.crt


ดูเพิ่มเติมที่: npm - การแก้ไขปัญหา - ข้อผิดพลาด SSL


1
> หากเป็นกรณีนี้คุณต้องส่งออกใบรับรองแบบลงนามด้วยตนเองจาก chain และนำเข้าสู่ระบบดังนั้นจึงมีการทำเครื่องหมายว่าเชื่อถือได้ - หลอกให้ฉัน
dmi3y

2
ที่ดี! นอกจากนี้ยังช่วยเพิ่ม NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem ให้กับ / etc / environment โหนด 7.4+ คำนึงถึงสิ่งนี้
ph4r05

9

NODE_TLS_REJECT_UNAUTHORIZED=0วางนี้ก่อนที่คำสั่งที่ดูเหมือนว่าจะทำงาน อดีต:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

วิธีที่ดีที่สุดคือการหาวิธีทำให้โหนดดูใบรับรองที่ลงชื่อด้วยตนเองว่าถูกต้อง ข้อเสนอแนะเข้มงวด ssl ข้างต้นไม่ได้ผลสำหรับฉันด้วยเหตุผลบางอย่าง หากคุณเข้าใจถึงผลกระทบด้านความปลอดภัยและต้องการการแก้ไขด่วนแบบชั่วคราวนี่คือสิ่งที่ฉันพบในปัญหา GitHub แบบสุ่มในระหว่างการค้นหาข้อผิดพลาดของ Google


1
สำหรับ Windows ให้ใช้ "set NODE_TLS_REJECT_UNAUTHORIZED = 0" และจากนั้นทำงานเหมือนจับใจ !!
Tarun

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.
absynce

1
อาจขึ้นอยู่กับว่าคุณติดตั้งจากที่เก็บ Ubuntu อย่างเป็นทางการ, ที่เก็บของบุคคลที่สาม (สำหรับเวอร์ชั่นใหม่กว่า), หรือรวบรวมด้วยตัวคุณเอง (สำหรับเวอร์ชั่นล่าสุด)
Redsandro

7

สำหรับผู้ที่ใช้mac ที่มีปัญหาเดียวกันและติดตั้ง npm ผ่านhomebrew :

brew uninstall npm

แล้วก็

brew install npm

ได้ผลสำหรับฉันใน osx (10.9.1)

แก้ไข : คุณอาจต้องbrew updateก่อนที่จะติดตั้ง npm คุณยังสามารถทำการbrew upgradeอัปเดต homebrew หลังจากได้ นอกจากนี้ยังอาจเป็นประโยชน์brew doctorหากคุณพบปัญหาอื่น ๆ


4

วิธีแก้ปัญหาที่รวดเร็วและสะอาด (ทดสอบ linux) (หลัง fatidic 27 กุมภาพันธ์ 2014)


ถอนการติดตั้ง npm

npm rm npm -g

ติดตั้ง npm (URL ใหม่คือwww.npmjs.orgแทนnpmjs.org )

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

เคล็ดลับ : วิธีการติดตั้ง node.js ใน linux https://stackoverflow.com/a/22099363/333061


คำสั่งไม่ทำงานอีกต่อไปเนื่องจากการเปลี่ยนเส้นทาง 301 แต่คุณยังสามารถพิมพ์https://www.npmjs.org/install.shในเบราว์เซอร์ของคุณและดาวน์โหลดก่อนที่จะรันด้วยตนเอง
svassr

หรือเรียกใช้ curl ด้วยแฟล็ก -L
Evan Cordell

curl https://npmjs.org/install.shคำสั่งก่อนหน้านี้เปลี่ยนเส้นทางไปhttps://www.npmjs.org/install.shที่นั่นเป็นสาเหตุที่curl https://www.npmjs.org/install.sh | shทำงานได้อย่างราบรื่น ตกลงที่จะติดตั้งจากนี้บน padawan น้อย :)
Igor Parra

2

ถอนการติดตั้ง NPM และติดตั้งอีกครั้ง

ตั้งแต่วันที่ 27 กุมภาพันธ์ 2014 npm ไม่รองรับใบรับรองที่ลงชื่อด้วยตนเองอีกต่อไป http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more

ลิงก์ด้านบนแนะนำการอัปเกรด NPM โดยใช้ NPM สิ่งนี้ล้มเหลวด้วย SELF_SIGNED_CERT_IN_CHAIN ​​...


2

การปิด SSL ดูเหมือนเป็นแนวคิดที่ไม่ดีอย่างยิ่ง บล็อกของ npmอธิบายว่าพวกเขาไม่สนับสนุนใบรับรองที่ลงชื่อด้วยตนเองอีกต่อไป พวกเขาแนะนำให้อัพเกรด npm ผ่านทางnpm install npm -gแต่แน่นอนว่าฉันมีข้อผิดพลาด SELF_SIGNED_CERT_IN_CHAIN ​​เดียวกัน ดังนั้นฉันเพิ่งปรับปรุงโหนดซึ่งปรับปรุง npm พร้อมกับมัน ขั้นตอนที่แน่นอนขึ้นอยู่กับวิธีที่คุณติดตั้งโหนดในสถานที่แรก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.