lỗi nhận: 'Lỗi: Lỗi SSL: SELF_SIGNED_CERT_IN_CHAIN' trong khi sử dụng npm


292

Tôi đang sử dụng npm v1.0.104 / nút 0.6.12 trên Ubuntu - Tôi đang nhận được lỗi được sao chép bên dưới trong khi cố gắng cài đặt bất kỳ mô-đun mới nào qua npm (Tôi đã kiểm tra socket.io trước đó bằng http, không phải https và tôi tự hỏi liệu điều đó có thể không đã dẫn đến vấn đề với npm / unsign certs). Lỗi bật lên sau khi npm cố gắng giải quyết URL ' https://registry.npmjs.org '. Có cách nào tôi có thể bỏ qua lỗi hoặc có thể xác định vị trí / thêm chứng chỉ vào một cửa hàng đáng tin cậy để tiếp tục sử dụng npm.

Mọi thông tin chi tiết về những gì cần được thực hiện để giải quyết vấn đề sẽ được đánh giá cao (tôi muốn giải quyết vấn đề thông qua cấu hình thay vì cài đặt lại nếu có thể).

Lỗi: "Lỗi: Lỗi SSL: SELF_SIGNED_CERT_IN_CHAIN"

Tin nhắn đầy đủ:

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
Đừng xóa SSL nghiêm ngặt. Hãy xem stackoverflow.com/a/16534065
nolim1t

15
Kể từ ngày 27 tháng 2 năm 2014, npm không còn hỗ trợ các chứng chỉ tự ký. Vui lòng xem bài đăng trên blog của npm hoặc câu trả lời gần đây bên dưới để biết thêm thông tin.
Kevin Reilly

1
Trong trường hợp bạn gặp sự cố với điều này trên AWS Elastic Beanstalk, một giải pháp có sẵn tại đây: stackoverflow.com/questions/22096459/ mẹo
Guillaume Flandre

1
nolim1t : điều này không giải quyết được nguyên nhân của vấn đề và Kevin : các lệnh trong bài đăng trên blog không đầy đủ. Xem stackoverflow.com/a/22099006/106302 để biết các lệnh làm việc cho tôi.
Chúng tôi là tất cả Monica

1
@ali VUI LÒNG thay đổi 'Câu trả lời được chấp nhận' Vấn đề này xuất hiện do nâng cấp npm và không phải là vấn đề với SSL. Tắt SSL là BAD và đặc biệt vì phản hồi hiện tại chính xác là cập nhật npm. Câu trả lời của Kevin Reilly nên là câu trả lời được chấp nhận. Cảm ơn bạn.
Mikezx6r

Câu trả lời:


391

Chạy sau đây đã giúp giải quyết vấn đề:

npm config set strict-ssl false

Tôi không thể bình luận về việc nó sẽ gây ra bất kỳ vấn đề nào khác tại thời điểm này. Hy vọng nó giúp.


39
thay vào đó, hãy chạy "npm config set null", bỏ qua các lỗi ssl là một ý tưởng tồi
alex

6
@SnowInferno SSL cũng đảm bảo rằng bạn đang nói chuyện với cơ quan đăng ký thực sự.npmjs.org. Ai đó có khả năng có thể cài đặt các gói độc hại.
quảng cáo

58
Điều này là sai lầm bẩn thỉu. Tại sao bạn thậm chí còn bận tâm sử dụng SSL nếu mỗi lần nó làm một việc mà bạn phải tắt nó đi? "Bất cứ khi nào bỏ qua một lỗi dẫn đến thành công, các nhà phát triển sẽ làm điều đó."
djechlin

20
Xin đừng bỏ qua các vấn đề ssl, vì lỗi là có lý do rất tốt. Ngoài ra, một chút tìm kiếm đã dẫn đến tweet sau, liên kết đến giải pháp chính thức cho vấn đề của bạn (cập nhật npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest

41
Vấn đề của tôi là do một proxy mà tôi đứng sau, "npm config set ca null" và 'npm config set ca ""' vẫn gây ra lỗi tương tự, nhưng loại bỏ SSL hoạt động hoàn hảo. Đôi khi thực hành tốt không quan trọng bằng những gì thực sự hoạt động.
Cory Schulz

220

Kể từ ngày 27 tháng 2 năm 2014, npm không còn hỗ trợ các chứng chỉ tự ký . Các tùy chọn sau, theo khuyến nghị của npm, là thực hiện một trong các cách sau:

Nâng cấp phiên bản npm của bạn

npm install npm -g --ca=""

-- HOẶC LÀ --

Giới thiệu phiên bản hiện tại của npm để sử dụng các nhà đăng ký đã biết

npm config set ca ""

Cập nhật: npm đã đăng thêm Trợ giúp với SELF_SIGNED_CERT_IN_CHAIN ​​và npm với nhiều giải pháp cụ thể hơn cho các môi trường khác nhau



Bạn có thể hoặc không cần phải trả trước sudocác khuyến nghị.


Sự lựa chọn khác

Có vẻ như mọi người đang gặp vấn đề khi sử dụng các đề xuất của npm, vì vậy đây là một số giải pháp tiềm năng khác.

Nâng cấp Node chính
Nhận lỗi này có thể gợi ý bạn có phiên bản nút cũ hơn, đi kèm với phiên bản cũ hơn của npm. Một giải pháp là nâng cấp phiên bản Node của bạn. Đây có thể là tùy chọn tốt nhất vì nó mang đến cho bạn cập nhật và sửa các lỗi và lỗ hổng hiện có.

Quá trình ở đây phụ thuộc vào cách bạn đã cài đặt Node, hệ điều hành của bạn và cách khác.

Cập nhật npm
Có thể bạn đã đến đây trong khi thử installgói, có npm install npm -gthể lỗi với cùng một lỗi. Nếu đây là trường hợp, sử dụng updatethay thế. Theo đề xuất của Nisanth Sojan:

npm update npm -g

Cập nhật npm thay thế
Một cách xung quanh vấn đề cơ bản là sử dụng các đăng ký đã biết, cài đặt và sau đó ngừng sử dụng các đăng ký đã biết. Theo đề xuất của jnylen:

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

10
Giải pháp dễ nhất có lẽ là tải xuống phiên bản mới nhất của chính Nodejs, nó bao gồm một phiên bản mới của npm nơi vấn đề này được giải quyết. Không có lệnh nào ở trên làm việc cho tôi.
Strille

1
Tôi đi với giải pháp này vì đây là giải pháp đầu tiên không bỏ qua ssl (bằng cách đặt kiểm tra thành false trong cấu hình hoặc sử dụng http thay thế). Cảm ơn!
hcpl

12
cài đặt npm npm -g cũng cung cấp cho tôi lỗi TỰF_SIGNED_CERT_IN_CHAIN
Anders Bornholm

3
Nếu điều này không hoạt động, hãy thực hiện npm config set ca ""trước, sau đó nâng cấp, sau đó hoàn tác thay đổi cấu hình. Xem: stackoverflow.com/a/22099006/106302
Chúng tôi là tất cả Monica

1
@Redsandro sudothay đổi người dùng, -gđặt cờ nếu cài đặt toàn cầu cho người dùng đó hoặc chỉ ở địa phương node_modules.
Radek

68

Hiện tại tôi chỉ chuyển URL đăng ký từ https sang http. Như thế này:

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

1
Làm việc như một cơ duyên đối với tôi. Tôi không muốn mất CA gốc hoặc buộc nó bỏ qua các lỗi SSL.
SnowInferno

Làm việc hoàn hảo. Cảm ơn!
húng quế muhammed

13
Vô hiệu hóa bảo mật không thể là giải pháp!
Alessandro Pezzato

1
Trước đây tôi đã sử dụng cái này, nhưng vì một số lý do, việc chuyển nó trở lại 'https: //' từ 'http: //' khiến tôi hoạt động trở lại.
kshreve

Sau khi thử tất cả các giải pháp khác, công việc này cuối cùng cũng cho tôi :-)
Swapnil Kadu

49
npm config set strict-ssl false -g

Để lưu nó trên toàn cầu


Làm điều này mang lại cho tôi cb() never called!lỗi npm khét tiếng
Jeremy

Sau cài đặt này, tôi đang geeting bên dưới lỗi npm ERR! mã E401 npm ERR! Không thể xác thực, cần: Đàm phán, NTLM npm ERR! Một bản ghi đầy đủ của lần chạy này có thể được tìm thấy trong: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi

31

Bạn cần nâng cấp 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

Bạn có thể cần phải thêm tiền tố vào các lệnh đó sudo.

Nguồn: http://blog.npmjs.org/post/78085451721/npms-elf-sign-cert ve-is-no-more


@Oliver Salzburg: tái. chỉnh sửa của bạn: trên OS XI không nghĩ sudolà bắt buộc, và chỉ tiền tố lệnh nâng cấp với tôi sudohoạt động tốt. YMMV.
Chúng tôi là tất cả Monica

Ah, điều này làm việc cho tôi. Cảm ơn các hướng dẫn cụ thể về việc hoàn tác thay đổi cấu hình (vì vậy tôi không phải tự mình đào nó)!
Matt

Hấp dẫn. Tôi chỉ thực hiện chỉnh sửa sau khi đã thử nghiệm điều này trên máy chủ Debian. Tôi thích bản sửa đổi hiện tại;)
Der Hochstapler

Ubuntu / Debian yêu cầu liên kết bổ sung, xem câu trả lời của tôi dưới đây.
Redsandro

2
Đây phải là giải pháp được chấp nhận. Điều này không vô hiệu hóa bảo mật và là giải pháp "chính thức" được mô tả trong blog npm.
Alessandro Pezzato

21

Lỗi SELF_SIGNED_CERT_IN_CHAINcó nghĩa là bạn có chứng chỉ tự ký trong chuỗi chứng chỉ mà về cơ bản không được hệ thống tin cậy.

Nếu điều đó xảy ra, về cơ bản, một cái gì đó tanh cá đang diễn ra, do đó như mọi người đã nhận xét, không nên vô hiệu hóa kiểm tra chứng chỉ, nhưng cách tiếp cận tốt hơn là hiểu vấn đề là gì và khắc phục nguyên nhân của nó.

Điều này có thể liên quan đến:

  • địa chỉ kho lưu trữ tùy chỉnh không có chứng chỉ phù hợp,

  • một mạng công ty với proxy minh bạch.

    Nếu bạn đứng sau proxy web công ty, bạn nên thiết lập các biến HTTP_PROXY/ HTTPS_PROXYmôi trường phù hợp hoặc đặt chúng thông qua npm:

    npm config set proxy http://proxy.company.com:8080
    npm config set https-proxy http://proxy.company.com:8080

    Xem: Cách thiết lập Node.js và Npm đằng sau proxy web công ty

Nếu bạn tin tưởng máy chủ lưu trữ, bạn có thể xuất chứng chỉ tự ký từ chuỗi và nhập chúng vào hệ thống, để chúng được đánh dấu là đáng tin cậy.

Điều này có thể đạt được bằng cách kiểm tra các chứng chỉ bằng cách (thay đổi example.comthành npm repo không thành công dựa trên npm-debug.log):

openssl s_client -showcerts -connect example.com:443 < /dev/null

sau đó lưu nội dung chứng chỉ (giữa BEGINEND) vào .crttệp để nhập nó.

Linux

Theo đề xuất , bạn có thể thêm chứng chỉ đã xuất vào /etc/environmenttệp (Nút 7.4+), như:

NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCer‌​ts.pem

CentOS

Trên CentOS 5, phần này có thể được thêm vào /etc/pki/tls/certs/ca-bundle.crttập tin, vd

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

Lưu ý: Để chỉ xuất chứng chỉ đầu tiên, hãy xóa gngay từ đầu.

Trong CentOS 6, tệp chứng chỉ có thể được sao chép vào /etc/pki/ca-trust/source/anchors/.

Ubuntu / Debian

Trong Ubuntu / Debian, sao chép tệp CRT vào /usr/local/share/ca-certificates/ rồi chạy:

sudo update-ca-certificates

hệ điều hành Mac

Trong macOS, bạn có thể chạy:

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

các cửa sổ

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


Xem thêm: npm - Xử lý sự cố - Lỗi SSL


1
> Nếu đó là trường hợp, bạn cần xuất chứng chỉ tự ký từ chuỗi và nhập chúng vào hệ thống, để chúng được đánh dấu là đáng tin cậy. - Làm cho tôi lừa.
dmi3y

2
Tuyệt quá! Nó cũng giúp thêm NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchor / yourCerts.pem vào / etc / môi trường. Nút 7.4+ đưa tài khoản này vào tài khoản
ph4r05

9

Đặt điều này trước khi lệnh dường như làm việc NODE_TLS_REJECT_UNAUTHORIZED=0. Ví dụ:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Tốt nhất là tìm ra cách làm cho nút xem chứng chỉ tự ký là hợp lệ. Vì một số lý do nghiêm ngặt, ssl ở trên không hoạt động với tôi vì một số lý do. Nếu bạn hiểu ý nghĩa bảo mật và cần khắc phục nhanh tạm thời, đây là những gì tôi tìm thấy trong một số sự cố github ngẫu nhiên trong quá trình tìm kiếm lỗi của Google.


1
đối với Windows, sử dụng "đặt NODE_TLS_RE DỰ_UNAUTHORIZED = 0". Và sau đó hoạt động như một bùa mê !!
Tarun

8

Các kho lưu trữ không còn hỗ trợ chứng chỉ tự ký. Bạn cần nâng cấp 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

Bạn cần mở một phiên cuối mới để sử dụng bản cập nhật npm.

Nguồn: Đây ban đầu là một chỉnh sửa về câu trả lời của jnylen . Mặc dù hướng dẫn có nội dung "Chúng tôi hoan nghênh tất cả các chỉnh sửa mang tính xây dựng, nhưng vui lòng thực hiện chúng một cách đáng kể" , chỉnh sửa đã bị từ chối do "Chỉnh sửa này thay đổi quá nhiều trong bài viết gốc; ý nghĩa ban đầu hoặc ý định của bài đăng sẽ bị mất." Tôi đoán cộng đồng thích một câu trả lời riêng biệt.


Điều này làm việc cho tôi. Tuy nhiên tôi không cần lệnh cuối cùng : sudo ln -s /usr/bin/nodejs /usr/bin/node.
vắng mặt

1
Nó có thể phụ thuộc vào việc bạn đã cài đặt từ kho Ubuntu chính thức, kho lưu trữ của bên thứ ba (cho phiên bản mới hơn) hay tự biên dịch (cho phiên bản mới nhất).
Redsandro

7

Đối với những người dùng mac có cùng vấn đề và đã cài đặt npm qua homebrew :

brew uninstall npm

sau đó

brew install npm

Hoạt động với tôi trên osx (10.9.1)

EDIT : Bạn có thể cần phải brew updatetrước khi cài đặt npm. Bạn cũng có thể làm một brew upgradesau khi cập nhật homebrew. Ngoài ra nó có thể hữu ích để chạy brew doctornếu bạn gặp phải bất kỳ vấn đề nào khác.


4

Giải pháp nhanh chóng và sạch sẽ (thử nghiệm linux) (Sau khi fatidic ngày 27 tháng 2 năm 2014)


Gỡ cài đặt npm

npm rm npm -g

Cài đặt npm (URL mới là www.npmjs.org thay vì npmjs.org )

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

Mẹo : cách cài đặt node.js trong linux https://stackoverflow.com/a/22099363/333061


Lệnh không hoạt động nữa do chuyển hướng 301 nhưng bạn vẫn có thể nhập https://www.npmjs.org/install.shvào trình duyệt của mình và tải xuống trước khi chạy thủ công.
Svassr

Hoặc chạy curl với cờ -L
Evan Cordell

curl https://npmjs.org/install.shlệnh trước đó đang chuyển hướng đến https://www.npmjs.org/install.shđó là lý do tại sao curl https://www.npmjs.org/install.sh | shhoạt động liền mạch. Bạn có thể cài đặt từ bây giờ trên padawan. :)
Igor Parra


2

Tắt SSL có vẻ như là một ý tưởng cực kỳ tồi tệ. blog của npm giải thích rằng họ không còn hỗ trợ chứng chỉ tự ký. Họ đề nghị nâng cấp npm thông qua npm install npm -g, nhưng tất nhiên tôi cũng gặp phải lỗi TỰF_SIGNED_CERT_IN_CHAIN. Vì vậy, tôi chỉ cập nhật nút, cập nhật npm cùng với nó. Thủ tục chính xác phụ thuộc vào cách bạn cài đặt nút ở vị trí đầu tiên.

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.