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.