menerima kesalahan: 'Kesalahan: Kesalahan SSL: SELF_SIGNED_CERT_IN_CHAIN' saat menggunakan npm

292

Saya menggunakan npm v1.0.104 / node 0.6.12 di ubuntu - Saya menerima kesalahan yang disalin di bawah ketika mencoba untuk menginstal modul baru melalui npm (saya menguji socket.io sebelumnya menggunakan http, bukan https meskipun & saya bertanya-tanya apakah itu bisa telah menghasilkan masalah dengan npm / sertifikat tidak bertanda tangan). Kesalahan muncul setelah npm mencoba menyelesaikan URL ' https://registry.npmjs.org '. Adakah di sana saya dapat mengabaikan kesalahan atau mungkin mencari / menambahkan sertifikat ke toko tepercaya untuk terus menggunakan npm.

Setiap wawasan tentang apa yang perlu dilakukan untuk menyelesaikan masalah akan dihargai (Saya lebih suka menyelesaikan masalah melalui konfigurasi yang bertentangan dengan menginstal ulang jika memungkinkan).

Kesalahan: "Kesalahan: Kesalahan SSL: SELF_SIGNED_CERT_IN_CHAIN"

Pesan lengkap:

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
ali haider
sumber
1
Jangan hapus ketat SSL. Lihatlah stackoverflow.com/a/16534065
nolim1t
15
Pada 27 Februari 2014, npm tidak lagi mendukung sertifikat yang ditandatangani sendiri. Silakan lihat posting blog npm atau jawaban terbaru di bawah ini untuk informasi lebih lanjut.
Kevin Reilly
1
Jika Anda mengalami masalah dengan ini di AWS Elastic Beanstalk, solusinya tersedia di sini: stackoverflow.com/questions/22096459/…
Guillaume Flandre
1
nolim1t : ini tidak membahas penyebab masalah, dan Kevin : perintah dalam posting blog tidak lengkap. Lihat stackoverflow.com/a/22099006/106302 untuk perintah yang bekerja untuk saya.
Kita Semua Monica
1
@ali SILAKAN ubah 'Jawaban yang diterima' Masalah ini muncul karena peningkatan npm, dan bukan masalah dengan SSL. Mematikan SSL adalah BAD, dan terutama karena respons yang benar saat ini adalah memperbarui npm. Jawaban oleh Kevin Reilly harus menjadi jawaban yang Diterima. Terima kasih.
Mikezx6r

Jawaban:

391

Menjalankan yang berikut ini membantu menyelesaikan masalah:

npm config set strict-ssl false

Saya tidak dapat mengomentari apakah itu akan menyebabkan masalah lain pada saat ini. Semoga ini bisa membantu.

ali haider
sumber
39
jalankan "npm config set ca null" sebagai gantinya, mengabaikan kesalahan ssl adalah ide yang buruk
alex
6
@SnowInferno SSL juga menjamin bahwa Anda berbicara dengan registry.npmjs.org yang sebenarnya. Seseorang berpotensi menginstal paket jahat.
adotout
58
Ini sangat salah. Mengapa Anda repot-repot menggunakan SSL jika setiap kali melakukan satu hal yang seharusnya Anda matikan? "Setiap kali mengabaikan kesalahan mengarah pada kesuksesan, pengembang akan melakukan hal itu."
djechlin
20
Tolong jangan abaikan masalah ssl, karena kesalahan ada karena alasan yang sangat bagus. Juga, sedikit pencarian menghasilkan tweet berikut, yang menghubungkan ke solusi resmi untuk masalah Anda (update npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest
41
Masalah saya disebabkan oleh proxy yang saya lewati, "npm config set ca null" dan 'npm config set ca ""' masih memberi saya kesalahan yang sama, tetapi menghapus SSL berfungsi dengan baik. Terkadang praktik yang baik tidak sepenting apa yang sebenarnya berhasil.
Cory Schulz
220

Pada 27 Februari 2014, npm tidak lagi mendukung sertifikat yang ditandatangani sendiri . Opsi berikut, seperti yang direkomendasikan oleh npm, adalah melakukan salah satu dari yang berikut:

Tingkatkan versi npm Anda

npm install npm -g --ca=""

-- ATAU --

Beri tahu versi npm Anda saat ini untuk menggunakan pendaftar yang dikenal

npm config set ca ""

Pembaruan: npm telah memposting Lebih banyak bantuan dengan SELF_SIGNED_CERT_IN_CHAIN ​​dan npm dengan lebih banyak solusi khusus untuk lingkungan yang berbeda



Anda mungkin atau mungkin tidak perlu bergantung sudopada rekomendasi.


Pilihan lain

Tampaknya orang mengalami masalah menggunakan rekomendasi npm, jadi berikut adalah beberapa solusi potensial lainnya.

Tingkatkan Node itu sendiri
Menerima kesalahan ini mungkin menyarankan Anda memiliki versi node yang lebih lama, yang secara alami datang dengan versi npm yang lebih lama. Salah satu solusinya adalah meningkatkan versi Node Anda. Ini kemungkinan merupakan opsi terbaik karena memberi Anda informasi terkini dan memperbaiki bug dan kerentanan yang ada.

Proses di sini tergantung pada bagaimana Anda menginstal Node, sistem operasi Anda, dan sebaliknya.

Perbarui npm
Menjadi yang mungkin Anda dapatkan di sini saat mencoba installpaket, ada kemungkinan yang npm install npm -ggagal dengan kesalahan yang sama. Jika ini masalahnya, gunakan updatesaja. Seperti yang disarankan oleh Nisanth Sojan:

npm update npm -g

Perbarui alternatif npm.
Salah satu cara mengatasi masalah mendasar adalah dengan menggunakan pendaftar yang dikenal, instal, dan kemudian berhenti menggunakan pendaftar yang dikenal. Seperti yang disarankan oleh jnylen:

npm config set ca ""
npm install npm -g
npm config delete ca
Kevin Reilly
sumber
10
Solusi termudah mungkin adalah mengunduh versi terbaru Nodejs itu sendiri, itu termasuk versi baru dari npm di mana masalah ini diselesaikan. Tidak ada perintah di atas yang berfungsi untuk saya.
Strille
1
Saya pergi dengan solusi ini karena ini adalah yang pertama tidak mengabaikan ssl (baik dengan mengatur centang ke false dalam konfigurasi atau menggunakan http sebagai gantinya). Terima kasih!
hcpl
12
npm install npm -g juga memberi saya kesalahan SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm
3
Jika ini tidak berhasil, lakukan npm config set ca ""dulu, kemudian tingkatkan, lalu batalkan perubahan konfigurasi. Lihat: stackoverflow.com/a/22099006/106302
We Are All Monica
1
@Redsandro sudomengubah pengguna, -gmenandai set apakah akan menginstal secara global untuk pengguna itu atau hanya di lokal node_modules.
Radek
68

Untuk saat ini saya hanya mengganti URL registri dari https ke http. Seperti ini:

npm config set registry="http://registry.npmjs.org/"
Hermann
sumber
1
Bekerja seperti pesona bagi saya. Saya tidak ingin kehilangan CA asli atau memaksanya untuk mengabaikan kesalahan SSL.
SnowInferno
Bekerja dengan sempurna. Terima kasih!
muhammed basil
13
Menonaktifkan keamanan tidak bisa menjadi solusinya!
Alessandro Pezzato
1
Saya sebelumnya pernah menggunakan ini, tetapi karena suatu alasan beralih kembali ke 'https: //' dari 'http: //' membuat tambang kembali berfungsi.
kshreve
Setelah mencoba semua solusi lain, ini berhasil bagi saya akhirnya :-)
Swapnil Kadu
49
npm config set strict-ssl false -g

Untuk menyimpannya secara global

Robin
sumber
Melakukan hal ini memberi saya cb() never called!kesalahan npm yang terkenal
Jeremy
Setelah pengaturan ini, saya melakukan geeting di bawah ini kesalahan npm ERR! kode E401 npm ERR! Tidak dapat mengautentikasi, perlu: Bernegosiasi, NTLM npm ERR! Log lengkap dari proses ini dapat ditemukan di: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi
31

Anda perlu memutakhirkan 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

Anda mungkin perlu mengawali perintah-perintah itu dengan sudo.

Sumber: http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more

Kita Semua Monica
sumber
@Oliver Salzburg: re. edit Anda: pada OS XI saya pikir tidak sudodiperlukan sama sekali, dan hanya mengawali perintah upgrade dengan sudobekerja dengan baik untuk saya. YMMV.
Kita Semua Monica
Ah, ini berhasil untuk saya. Terima kasih untuk instruksi spesifik tentang membatalkan perubahan konfigurasi (jadi saya tidak perlu menggali sendiri)!
Matt
Menarik. Saya hanya melakukan pengeditan setelah menguji ini di server Debian. Saya suka revisi saat ini;)
Der Hochstapler
Ubuntu / Debian memerlukan tautan tambahan, lihat jawaban saya di bawah ini.
Redsandro
2
Ini harus menjadi solusi yang diterima. Ini tidak menonaktifkan keamanan dan merupakan solusi "resmi" yang dijelaskan di blog npm.
Alessandro Pezzato
21

Kesalahan SELF_SIGNED_CERT_IN_CHAINberarti bahwa Anda memiliki sertifikat yang ditandatangani sendiri dalam rantai sertifikat yang pada dasarnya tidak dipercaya oleh sistem.

Jika itu terjadi, pada dasarnya sesuatu yang mencurigakan sedang terjadi, oleh karena itu seperti yang sudah dikomentari orang, tidak disarankan untuk hanya menonaktifkan pemeriksaan sertifikat, tetapi pendekatan yang lebih baik adalah memahami apa masalahnya dan memperbaiki penyebabnya.

Ini mungkin terkait dengan:

  • alamat repositori khusus yang tidak memiliki sertifikat yang tepat,

  • jaringan perusahaan dengan proxy transparan.

    Jika Anda berada di belakang proxy web perusahaan, Anda harus mengatur variabel lingkungan HTTP_PROXY/ tepat HTTPS_PROXYatau mengaturnya melalui npm:

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

    Lihat: Cara mengatur Node.js dan Npm di belakang proksi web perusahaan

Jika Anda mempercayai tuan rumah, Anda dapat mengekspor sertifikat yang ditandatangani sendiri dari rantai dan mengimpornya ke sistem, sehingga ditandai sebagai tepercaya.

Ini dapat dicapai dengan memeriksa sertifikat dengan (ubah example.commenjadi repo npm yang gagal berdasarkan pada npm-debug.log):

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

kemudian simpan konten sertifikat (antara BEGINdan END) ke dalam .crtfile untuk mengimpornya.

Linux

Sesuai saran , Anda dapat menambahkan sertifikat yang diekspor ke /etc/environmentfile (Node 7.4+), seperti:

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

CentOS

Pada CentOS 5 ini dapat ditambahkan ke /etc/pki/tls/certs/ca-bundle.crtfile, mis

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

Catatan: Untuk hanya mengekspor sertifikat pertama, hapus gdi awal.

Di CentOS 6, file sertifikat dapat disalin ke /etc/pki/ca-trust/source/anchors/.

Ubuntu / Debian

Di Ubuntu / Debian, salin file CRT ke /usr/local/share/ca-certificates/ kemudian jalankan:

sudo update-ca-certificates

macOS

Di macOS Anda dapat menjalankan:

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

Windows

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


Lihat juga: npm - Pemecahan masalah - Kesalahan SSL

kenorb
sumber
1
> Jika itu masalahnya, Anda perlu mengekspor sertifikat yang ditandatangani sendiri dari rantai dan mengimpornya ke sistem, sehingga ditandai sebagai tepercaya. - Membuat trik untukku.
dmi3y
2
Bagus! Juga membantu menambahkan NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem ke lingkungan / etc /. Node 7.4+ memperhitungkan ini
ph4r05
9

Menempatkan ini sebelum perintah tampaknya berhasil NODE_TLS_REJECT_UNAUTHORIZED=0. ex:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Akan lebih baik untuk mengetahui bagaimana membuat simpul melihat sertifikat yang ditandatangani sendiri sebagai valid. saran ketat-ssl di atas tidak bekerja untuk saya karena alasan tertentu Jika Anda memahami implikasi keamanan dan memerlukan perbaikan cepat sementara, inilah yang saya temukan dalam beberapa masalah github acak selama pencarian kesalahan di Google.

Adam Lane
sumber
1
untuk Windows, gunakan "atur NODE_TLS_REJECT_UNAUTHORIZED = 0". Dan kemudian bekerja seperti pesona !!
Tarun
8

Repositori tidak lagi mendukung sertifikat yang ditandatangani sendiri. Anda perlu meningkatkan 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

Anda harus membuka sesi terminal baru untuk menggunakan yang diperbarui npm.

Sumber: Ini awalnya merupakan edit pada jawaban jnylen . Meskipun pedoman mengatakan "Kami menyambut semua pengeditan yang konstruktif, tapi tolong buat itu substansial," pengeditan ditolak karena "Pengeditan ini terlalu banyak berubah di pos asli; makna atau maksud asli dari pos akan hilang." Saya kira komunitas lebih suka jawaban yang terpisah.

Redsandro
sumber
Ini berhasil untuk saya. Namun saya tidak perlu perintah terakhir: sudo ln -s /usr/bin/nodejs /usr/bin/node.
absynce
1
Ini mungkin tergantung pada apakah Anda menginstal dari repositori resmi Ubuntu, repositori pihak ketiga (untuk versi yang lebih baru), atau mengkompilasi diri sendiri (untuk versi terbaru).
Redsandro
7

Bagi mereka yang menggunakan mac dengan masalah yang sama dan menginstal npm melalui homebrew :

brew uninstall npm

kemudian

brew install npm

Bekerja untuk saya di osx (10.9.1)

EDIT : Anda mungkin perlu brew updatesebelum menginstal npm. Anda juga dapat melakukan brew upgradesetelah memperbarui homebrew. Mungkin juga akan membantu brew doctorjika Anda mengalami masalah lain.

Patrick
sumber
4

Solusi cepat dan bersih (diuji linux) (Setelah fatidic 27 Februari 2014)


Copot npm

npm rm npm -g

Instal npm (URL baru adalah www.npmjs.org, bukan npmjs.org )

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

Kiat : cara menginstal node.js di linux https://stackoverflow.com/a/22099363/333061

Igor Parra
sumber
Perintah tidak berfungsi lagi karena pengalihan 301 tetapi Anda masih bisa mengetikkan https://www.npmjs.org/install.shperamban dan mengunduhnya sebelum menjalankannya secara manual.
svassr
Atau jalankan ikal dengan bendera -L
Evan Cordell
curl https://npmjs.org/install.shperintah sebelumnya diarahkan ke https://www.npmjs.org/install.shitu sebabnya curl https://www.npmjs.org/install.sh | shbekerja dengan lancar. tidak apa-apa untuk menginstal mulai sekarang padawan kecil. :)
Igor Parra
2

Mematikan SSL sepertinya ide yang sangat buruk. Blog npm menjelaskan bahwa mereka tidak lagi mendukung sertifikat yang ditandatangani sendiri. Mereka menyarankan untuk meningkatkan npm melalui npm install npm -g, tetapi saya tentu saja mendapatkan kesalahan SELF_SIGNED_CERT_IN_CHAIN ​​yang sama. Jadi saya baru saja memperbarui simpul, yang diperbarui npm bersama dengannya. Prosedur yang tepat tergantung pada bagaimana Anda menginstal node di tempat pertama.

Jeremiah Orr
sumber