ได้รับข้อผิดพลาด: 'ข้อผิดพลาด: ข้อผิดพลาด 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.