npm ผิดพลาด! รหัส UNABLE_TO_GET_ISSUER_CERT_LOCALLY


118

ฉันกำลังลองทุกวิธีในการสร้างแอปพลิเคชันการตอบสนอง ฉันได้ลองใช้ maven แล้วและตอนนี้ฉันกำลังลองใช้ระบบสร้างแอป crate-react-app จาก Facebook Incubators

เมื่อฉันพยายามรันคำสั่งcreate-react-app my-appในสภาพแวดล้อม npm มันทำงานบนระบบส่วนบุคคลของฉันโดยไม่มีปัญหา แต่เมื่อฉันลองใช้คำสั่งเดียวกันในสภาพแวดล้อมการทำงานของฉันฉันพบกับข้อผิดพลาดนี้ในพรอมต์คำสั่ง

npm ERR! node v6.10.2
npm ERR! npm  v3.10.10
npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

npm ERR! unable to get local issuer certificate
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

1
ฉันยังไม่สามารถใช้เมื่อฉันวิ่งsudo npm install aws-sdkการเรียกใช้sudo npm install aws-sdkทำให้เกิดข้อผิดพลาดนี้สำหรับฉัน
Kyle Bridenstine

คำตอบ:


296

วิธีแก้ปัญหาอย่างรวดเร็วจากการค้นหาทางอินเทอร์เน็ตคือnpm config set strict-ssl falseโชคดีที่ได้ผล แต่ในสภาพแวดล้อมการทำงานของฉันฉันถูก จำกัด ให้ตั้งค่าแฟล็ก SSL ที่เข้มงวดเป็นเท็จ

ต่อมาฉันพบวิธีแก้ปัญหาที่ปลอดภัยและใช้ได้ผล

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

สิ่งนี้ทำงานได้อย่างสมบูรณ์และฉันได้รับข้อความแสดงความสำเร็จHappy Hacking!โดยไม่ตั้งค่าแฟล็ก SSL ที่เข้มงวดเป็นเท็จ


2
ฉันก็เช่นกันเพิ่งเปลี่ยนกลับไปใช้ที่เก็บ NPM เวอร์ชัน HTTP (ตรงข้ามกับRegistry.npmjs.org ) เนื่องจากพร็อกซีที่ทำงานของฉันทำให้เกิดปัญหา (เนื่องจากทำหน้าที่เป็น MITM ทำให้เกิดปัญหาการตรวจสอบการรับรอง) วันหนึ่งฉันจะคิด ออกใบรับรอง แต่ฉันต้องดาวน์โหลดแพคเกจติดมัน!
Robert Dundon

1
ฉันคิดว่าฉันมีการตั้งค่านี้อยู่แล้ว แต่เมื่อดูใกล้ ๆ ฉันมี https แทนที่จะเป็น http ( Registry.npmjs.org ) เปลี่ยนเป็น http และใช้งานได้
Ashish Bajpai

สำหรับฉันฉันทำอย่างนี้ แต่ฉันยังไม่สามารถใช้เมื่อฉันวิ่งsudo npm install aws-sdkการเรียกใช้sudo npm install aws-sdkทำให้เกิดข้อผิดพลาดนี้สำหรับฉัน
Kyle Bridenstine

ผมได้รับข้อผิดพลาดเดียวกันที่ปรากฏในโพสต์นี้ดังนั้นฉันวิ่งnpm config set strict-ssl falseและnpm config set registry http://registry.npmjs.org/ แต่ผมยังคงได้รับข้อผิดพลาดเมื่อทำงานsudo npm install aws-sdkแต่เมื่อฉันลดลงsudoส่วนหนึ่งและเพียงแค่วิ่งnpm install aws-sdkมันทำงาน
Kyle Bridenstine

สำหรับฉันไม่มีอะไรอื่นนอกจากการตั้งค่าของnpm config set strict-ssl falseไม่ทำงาน ฉันรู้สึกว่านี่เป็นสิ่งที่node.jsและnpmทีมงานควรตรวจสอบและจัดทำเอกสารด้วยวิธีการที่เหมาะสมหากไม่สามารถแก้ไขได้สำหรับพวกเขา
RinoTom

23

สิ่งที่อาจเกิดขึ้นคือ บริษัท ของคุณถอดรหัสการรับส่งข้อมูลบางอย่างและเข้ารหัสอีกครั้งด้วยใบรับรองของพวกเขา (ซึ่งคุณอาจมีอยู่แล้วในพวงกุญแจหรือใบรับรองหลักที่เชื่อถือได้)

หากคุณใช้โหนด 7 ขึ้นไปฉันพบว่าการแก้ไขนี้เข้ากันได้กับ node และ node-gyp (สำหรับ Windows คุณจะต้องทำสิ่งนี้ให้แตกต่างออกไป แต่โดยพื้นฐานแล้วคุณต้องเพิ่มตัวแปรสภาพแวดล้อมนี้):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (ใน Windows คุณอาจต้องลบเครื่องหมายคำพูด - ดูความคิดเห็น)

ไฟล์ pem สามารถมีใบรับรองได้หลายใบ: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

ตรวจสอบให้แน่ใจว่าใบรับรองของคุณอยู่ในรูปแบบ pem ที่เหมาะสม (คุณต้องมีการแบ่งบรรทัดจริงไม่ใช่ตามตัวอักษร\n)

ดูเหมือนจะไม่สามารถใช้งานได้กับเส้นทางสัมพัทธ์ ( .หรือ~)

การแก้ไขนี้โดยทั่วไปจะบอก npm และ node-gyp ให้ใช้การตรวจสอบกับ CA ปกติ แต่ยังอนุญาตให้ใช้ใบรับรองนี้เมื่อพบ

ตามหลักการแล้วคุณจะสามารถใช้ใบรับรองที่เชื่อถือได้ของระบบของคุณ แต่น่าเสียดายที่ไม่เป็นเช่นนั้น


ยิ่งใหญ่ โหวตสำหรับคำอธิบายโดยละเอียดของคุณ ช่วยให้ฉันเข้าใจดีขึ้น ข้อมูลที่ดี
vissu

2
ใน Windows เส้นทางไม่ทำงานเว้นแต่ฉันจะลบเครื่องหมายคำพูด
Chris Anderson

1
ฉันมีปัญหานี้เนื่องจาก BlueCoat และฉันต้องอ้างอิงคำตอบของคุณทุกๆสองสามเดือน เป็นทางออกที่ดีกว่าการปิด SSL ที่เข้มงวดอย่างแน่นอน - ขอบคุณ!
Jordan Grey

1
ฉันจะหาไฟล์. pem ใน Windows ได้ที่ไหน ฉันค้นหา HardDisk ทั้งหมดเพื่อหาไฟล์ pem พบว่ามีไม่กี่ระดับใน Windows \ System32 แต่มันไม่ทำงาน
Sanchit Jain

10

การเปลี่ยน NPM repo URL เป็น HTTP เป็นการแก้ไขด่วน แต่ฉันต้องการใช้ HTTPS

ในกรณีของฉันพร็อกซีที่นายจ้างของฉัน (ZScaler) ก่อให้เกิดปัญหา (เนื่องจากทำหน้าที่เป็น MITM ทำให้เกิดปัญหาการตรวจสอบใบรับรอง)

ฉันลืมฉันพบสคริปต์ที่ช่วยในเรื่องนี้และ Git (สำหรับการโคลน repos GitHub ผ่าน HTTPS มีปัญหาเดียวกัน) และแยกมันเพื่อใช้งาน

โดยทั่วไปจะทำสิ่งต่อไปนี้สำหรับ git:

git config --global http.proxy http://gateway.zscaler.net:80/
git config --system http.proxy http://gateway.zscaler.net:80/

และสำหรับโหนดนั้นจะเพิ่มproxy=http://gateway.zscaler.net:80/ที่ส่วนท้ายของc:\Users\$USERNAME\npm\.npmrc

นั่นช่วยแก้ปัญหาให้ฉันได้


2
คุณอาจต้องการตรวจสอบว่า บริษัท ของคุณมีการกำหนดค่า ZS cloud ใดโดยพื้นฐานแล้วให้ตรวจสอบip.zscaler.comชื่อคลาวด์และตั้งค่านั้นใน URL เช่น: หากมีข้อความระบุว่าให้zscalertwo.netแทนที่ด้วย URL ต่อไปนี้gateway.zscalertwo.net
Rahul Bharadwaj

6

หลังจากลองใช้ทุกวิธีแล้วฉันพบ:

  • การปิด ssl ที่เข้มงวด: npm config set strict-ssl=false
  • การเปลี่ยนรีจิสทรีเป็น http แทน https: npm config set registry http://registry.npmjs.org/
  • การเปลี่ยนการตั้งค่าคาเฟ่ของฉัน: npm config set cafile /path/to/your/cert.pem
  • หยุดปฏิเสธ CA ที่ไม่รู้จัก: set NODE_TLS_REJECT_UNAUTHORIZED=0

วิธีแก้ปัญหาที่ดูเหมือนว่าจะทำงานได้ดีที่สุดสำหรับฉันตอนนี้คือการใช้ตัวแปรสภาพแวดล้อมNODE_EXTRA_CA_CERTSซึ่งขยาย CA ที่มีอยู่แทนที่จะแทนที่ด้วยตัวเลือก cafile ในไฟล์. npmrc ของคุณ คุณสามารถตั้งค่าได้โดยป้อนสิ่งนี้ในเทอร์มินัลของคุณ:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

แน่นอนว่าการตั้งค่าตัวแปรนี้ทุกครั้งอาจสร้างความรำคาญได้ดังนั้นฉันจึงเพิ่มมันลงในโปรไฟล์ bash ของฉันเพื่อที่จะได้ตั้งค่าทุกครั้งที่เปิดเทอร์มินัล หากคุณยังไม่มี~/.bash_profileไฟล์ให้สร้างขึ้นมา export NODE_EXTRA_CA_CERTS=path/to/your/cert.pemจากนั้นในตอนท้ายของไฟล์เพิ่มว่า จากนั้นลบการตั้งค่าคาเฟ่ใน. npmrc ของคุณ


ตัวเลือกที่สี่เป็นเสน่ห์ process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt

5

เชื่อฉันสิ่งนี้จะได้ผลสำหรับคุณ:

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

แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป โปรดดูวิธีตอบเพื่ออ่านเพิ่มเติมเกี่ยวกับวิธีตอบคำถาม
Artog

4

มีข้อผิดพลาดเดียวกัน ดูเหมือนว่าจะเกี่ยวข้องกับใบรับรอง SSL หากคุณใช้ NPM สำหรับแพ็กเกจสาธารณะ (ไม่ต้องการความปลอดภัยของ HTTPS) คุณสามารถปิดการตรวจสอบคีย์ SSL แบบเข้มงวดด้วยคำสั่งต่อไปนี้

นี่อาจเป็นวิธีแก้ไขที่ง่ายที่สุดหากคุณต้องการติดตั้งแพ็คเกจที่เผยแพร่ต่อสาธารณะเพียงไม่กี่แพ็คเกจในครั้งเดียว

npm config set strict-ssl=false

5
มีความเสี่ยงโดยธรรมชาติในการทำเช่นนี้หากคุณตกเป็นเหยื่อของการโจมตีแบบคนตรงกลางที่ชั่วร้ายแพคเกจสามารถแก้ไขได้เมื่อคุณดาวน์โหลด
Alex KeySmith

@AlexKeySmith คุณพูดถูก อย่างไรก็ตามอัตราต่อรองค่อนข้างต่ำ นี่อาจเป็นทางเลือกเดียวสำหรับบางคน Caveat Emptor
Jason Geiger

1

ฉันพบข้อผิดพลาดนี้เมื่อพยายามอัปเดต npm แต่มีเวอร์ชันเก่าจริงๆ (1.3.6!) ติดตั้งจาก yum ใน AWS Linux ฉันสามารถติดตั้ง npm เวอร์ชันใหม่กว่าด้วยตนเองได้และทุกอย่างได้รับการแก้ไข


0

รหัสด้านล่างทำงานให้ฉันอย่างสมบูรณ์ที่นี่ทำให้ http เท่านั้นแทน https

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

0

ในกรณีของฉันเมื่อถึงจุดหนึ่งฉันตั้งค่าการกำหนดค่าส่วนกลางของฉันเพื่อใช้ใบรับรองที่มีไว้สำหรับโครงการ

npm config list

/path/to/global/.npmrc
NODE_EXTRA_CA_CERTS = "./certs/chain.pem"

ฉันเปิดไฟล์ลบบรรทัดและnpm installทำงานอีกครั้ง


0

ได้รับข้อผิดพลาดด้านล่าง

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm ติดตั้ง vue npm ERR! รหัส UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! ผิดพลาด UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! ขอไปที่ https://registry.npmjs.org/vueล้มเหลวเหตุผล: ไม่สามารถรับใบรับรองผู้ออกในพื้นที่

npm ผิดพลาด! บันทึกทั้งหมดของการรันนี้สามารถพบได้ใน: npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ NPM-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

คำสั่งด้านล่างแก้ไขปัญหา:

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