npm ERR! mã UNABLE_TO_GET_ISSUER_CERT_LOCALLY


118

Tôi đang thử tất cả các cách tạo ứng dụng phản ứng. Tôi đã thử với maven và bây giờ tôi đang thử với hệ thống xây dựng ứng dụng crate-react-từ Facebook Incubators.

Khi tôi cố gắng chạy lệnh create-react-app my-apptrong môi trường npm, nó hoạt động trên hệ thống cá nhân của tôi mà không có vấn đề gì. Nhưng khi tôi thử cùng một lệnh trong môi trường làm việc của mình, tôi đã gặp phải lỗi này trên dấu nhắc lệnh

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
Tôi cũng không thể sử dụng sudokhi tôi chạy npm install aws-sdk. Đang chạy sudo npm install aws-sdkgây ra lỗi này cho tôi.
Kyle Bridenstine

Câu trả lời:


296

npm config set strict-ssl falseMay mắn thay, một giải pháp nhanh chóng từ việc tìm kiếm trên internet là nó đã hoạt động. Nhưng là một phần của môi trường làm việc của tôi, tôi bị hạn chế đặt cờ nghiêm ngặt thành sai.

Sau đó, tôi đã tìm thấy một giải pháp an toàn và hiệu quả,

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

điều này hoạt động hoàn hảo và tôi nhận được thông báo thành công Happy Hacking!bằng cách không đặt cờ nghiêm ngặt ssl thành sai.


2
Tôi cũng vậy, vừa hoàn nguyên để sử dụng phiên bản HTTP của kho lưu trữ NPM (trái ngược với registry.npmjs.org ), vì proxy công việc của tôi gây ra sự cố (vì nó hoạt động như một MITM, gây ra các vấn đề xác minh chứng nhận) Một ngày nào đó tôi sẽ tìm vấn đề về chứng chỉ, nhưng tôi chỉ cần tải xuống một gói, đăng nó!
Robert Dundon

1
Tôi nghĩ, tôi đã có cài đặt này nhưng khi xem xét kỹ hơn, tôi có https thay vì http ( registry.npmjs.org ). Đã thay đổi thành http và nó hoạt động.
Ashish Bajpai

Đối với tôi, tôi đã làm điều này nhưng tôi cũng không thể sử dụng sudokhi tôi chạy npm install aws-sdk. Đang chạy sudo npm install aws-sdkgây ra lỗi này cho tôi.
Kyle Bridenstine

Tôi đã nhận được lỗi tương tự hiển thị trên bài đăng này vì vậy tôi đã chạy npm config set strict-ssl falsenpm config set registry http://registry.npmjs.org/ nhưng tôi vẫn gặp lỗi khi chạy sudo npm install aws-sdknhưng khi tôi bỏ sudophần và chỉ chạy npm install aws-sdknó hoạt động.
Kyle Bridenstine

đối với tôi không có gì khác ngoài cài đặt npm config set strict-ssl falsekhông hoạt động. Tôi cảm thấy đây là điều mà nhóm node.jsnpmnhóm nên xem xét và ghi lại tài liệu với một công việc thích hợp xung quanh nếu nó không thể sửa chữa được cho họ.
RinoTom

23

những gì có thể đang xảy ra là công ty của bạn giải mã một số lưu lượng nhất định và mã hóa lại nó bằng chứng chỉ của họ (mà bạn có thể đã có trong chuỗi khóa hoặc chứng chỉ gốc đáng tin cậy của mình)

nếu bạn đang sử dụng nút 7 trở lên, tôi thấy bản sửa lỗi này tương thích với nút và nút-gyp (đối với Windows, bạn sẽ cần làm điều này theo cách khác, nhưng về cơ bản bạn chỉ cần thêm biến môi trường này):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (trong Windows, bạn có thể cần phải xóa dấu ngoặc kép - xem nhận xét)

tệp pem có thể có nhiều chứng chỉ: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

đảm bảo chứng chỉ của bạn ở định dạng pem phù hợp (bạn cần ngắt dòng thực sự không phải là chữ \n)

Tôi dường như không thể làm cho nó hoạt động với các đường dẫn tương đối ( .hoặc ~)

Bản sửa lỗi này về cơ bản yêu cầu npm và node-gyp sử dụng kiểm tra đối với các CA thông thường, nhưng cũng cho phép chứng chỉ này khi gặp nó

Lý tưởng nhất là bạn có thể sử dụng các chứng chỉ đáng tin cậy của hệ thống của mình, nhưng tiếc là không phải như vậy.


Tuyệt quá. Hãy bỏ phiếu cho lời giải thích chi tiết của bạn. Đã giúp tôi hiểu rõ hơn. Thông tin tốt.
vissu

2
Trong Windows, đường dẫn không hoạt động trừ khi tôi xóa dấu ngoặc kép.
Chris Anderson

1
Tôi có vấn đề này do BlueCoat và tôi phải tham khảo câu trả lời của bạn vài tháng một lần. Chắc chắn là một giải pháp tốt hơn việc vô hiệu hóa SSL nghiêm ngặt — cảm ơn bạn!
Jordan Grey

Tôi có thể tìm tệp .pem trong Windows ở đâu. Tôi đã tìm kiếm toàn bộ HardDisk để tìm tệp pem đã tìm thấy một vài cấp độ sâu bên trong Windows \ System32. Nhưng nó không hoạt động
Sanchit Jain

10

Thay đổi URL repo NPM thành HTTP hoạt động như một cách khắc phục nhanh, nhưng tôi muốn sử dụng HTTPS.

Trong trường hợp của tôi, proxy tại công ty của tôi (ZScaler) đã gây ra sự cố (vì nó hoạt động như một MITM, gây ra các vấn đề về xác minh chứng nhận)

Tôi quên rằng tôi đã tìm thấy một tập lệnh giúp giải quyết vấn đề này và Git (để sao chép các repos GitHub qua HTTPS cũng gặp vấn đề tương tự) và đã chia nó để tôi sử dụng

Về cơ bản, nó thực hiện những việc sau cho git:

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

và đối với Node, nó thêm proxy=http://gateway.zscaler.net:80/vào cuốic:\Users\$USERNAME\npm\.npmrc

Điều đó đã giải quyết vấn đề cho tôi.


2
Bạn có thể muốn kiểm tra đám mây ZS mà công ty của bạn được định cấu hình. Về cơ bản, hãy kiểm tra ip.zscaler.comtên đám mây và đặt tên đám mây đó trong URL. Ví dụ: nếu nó nói zscalertwo.netthì hãy thay thế bằng URL sau:gateway.zscalertwo.net
Rahul Bharadwaj

6

Sau khi thử mọi giải pháp tôi có thể tìm thấy:

  • Tắt ssl nghiêm ngặt: npm config set strict-ssl=false
  • Thay đổi sổ đăng ký thành http thay vì https: npm config set registry http://registry.npmjs.org/
  • Thay đổi cài đặt cafile của tôi: npm config set cafile /path/to/your/cert.pem
  • Ngừng từ chối các CA không xác định: set NODE_TLS_REJECT_UNAUTHORIZED=0

Giải pháp có vẻ đang hoạt động tốt nhất đối với tôi lúc này là sử dụng biến môi trường NODE_EXTRA_CA_CERTS để mở rộng các CA hiện có thay vì thay thế chúng bằng tùy chọn cafile trong tệp .npmrc của bạn. Bạn có thể đặt nó bằng cách nhập mã này vào thiết bị đầu cuối của mình:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Tất nhiên, việc đặt biến này mỗi lần có thể gây khó chịu, vì vậy tôi đã thêm nó vào hồ sơ bash của mình để nó sẽ được đặt mỗi khi tôi mở terminal. Nếu bạn chưa có ~/.bash_profiletệp, hãy tạo một tệp. Sau đó, ở cuối tệp đó thêm export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Sau đó, xóa cài đặt cafile trong .npmrc của bạn.


Lựa chọn thứ tư là một sự quyến rũ; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt

5

Tin tưởng tôi, điều này sẽ làm việc cho bạn:

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

Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. Vui lòng tham khảo Làm thế nào để trả lời để đọc thêm về làm thế nào để trả lời câu hỏi
Artog

4

Có cùng một lỗi. Có vẻ như nó liên quan đến chứng chỉ SSL. Nếu bạn đang sử dụng NPM cho các gói công khai (không cần bảo mật của HTTPS), bạn có thể tắt xác thực khóa SSL nghiêm ngặt bằng lệnh sau.

Đây có thể là cách khắc phục đơn giản nhất nếu bạn chỉ muốn cài đặt một vài gói công khai một lần.

npm config set strict-ssl=false

5
Việc làm này có rủi ro cố hữu, nếu bạn là nạn nhân của một cuộc tấn công bất chính của kẻ trung gian, gói có thể được sửa đổi khi bạn tải xuống.
Alex KeySmith

@AlexKeySmith Bạn nói đúng. Tuy nhiên, tỷ lệ cược khá thấp. Đây có thể là lựa chọn duy nhất cho một số người. Caveat Emptor
Jason Geiger

1

Tôi đã gặp lỗi này khi cố gắng cập nhật npm nhưng đã cài đặt phiên bản thực sự cũ (1.3.6!) Từ yum trong AWS Linux. Tôi đã có thể cài đặt thủ công phiên bản npm mới hơn và mọi thứ đã được khắc phục.


0

Đoạn mã dưới đây hoạt động hoàn hảo đối với tôi ở đây chỉ tạo http thay vì https

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

0

Trong trường hợp của tôi, tại một số thời điểm, tôi đặt cấu hình chung của mình để sử dụng chứng chỉ dành cho một dự án.

npm config list

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

Tôi đã mở tệp, xóa dòng và npm install làm việc lại.


0

gặp lỗi dưới đây

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR! mã UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! yêu cầu đến https://registry.npmjs.org/vue không thành công, lý do: không thể lấy chứng chỉ tổ chức phát hành địa phương

npm ERR! Có thể tìm thấy nhật ký đầy đủ của lần chạy này trong: 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

Lệnh dưới đây đã giải quyết được sự cố:

npm config set strict-ssl false
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.