npm ERR! kode UNABLE_TO_GET_ISSUER_CERT_LOCALLY

118

Saya mencoba semua cara membuat aplikasi react. Saya telah mencoba dengan maven dan sekarang saya mencoba dengan sistem pembuatan aplikasi crate-react dari Facebook Incubators.

Ketika saya mencoba menjalankan perintah create-react-app my-appdi lingkungan npm, itu berfungsi pada sistem pribadi saya tanpa masalah. Tetapi ketika saya mencoba perintah yang sama di lingkungan kerja saya, saya mengalami kesalahan ini pada prompt perintah

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>
Dinesh
sumber
1
Saya juga tidak bisa menggunakan sudosaat saya berlari npm install aws-sdk. Menjalankan sudo npm install aws-sdkmenyebabkan kesalahan ini bagi saya.
Kyle Bridenstine

Jawaban:

296

Solusi cepat dari pencarian internet adalah npm config set strict-ssl false, untungnya itu berhasil. Tetapi sebagai bagian dari lingkungan kerja saya, saya dibatasi untuk menyetel bendera strict-ssl ke false.

Kemudian saya menemukan solusi yang aman dan berfungsi,

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

ini bekerja dengan sempurna dan saya mendapat pesan sukses Happy Hacking!dengan tidak menyetel flag strict-ssl ke false.

Dinesh
sumber
2
Saya juga, baru saja kembali menggunakan versi HTTP dari repositori NPM (sebagai lawan registry.npmjs.org ), karena proxy kerja saya menyebabkan masalah (karena berfungsi sebagai MITM, menyebabkan masalah verifikasi sertifikasi) Suatu hari saya akan memikirkan keluar dari masalah sertifikat, tetapi saya hanya perlu mengunduh paket, sial!
Robert Dundon
1
Saya pikir, saya sudah memiliki pengaturan ini tetapi ketika melihat lebih dekat saya memiliki https, bukan http ( registry.npmjs.org ). Berubah ke http dan itu berhasil.
Ashish Bajpai
Bagi saya, saya melakukan ini tetapi saya juga tidak bisa menggunakannya sudosaat berlari npm install aws-sdk. Menjalankan sudo npm install aws-sdkmenyebabkan kesalahan ini bagi saya.
Kyle Bridenstine
Saya mendapatkan kesalahan yang sama yang ditunjukkan pada posting ini jadi saya berlari npm config set strict-ssl falsedan npm config set registry http://registry.npmjs.org/ tetapi saya masih mendapatkan kesalahan saat menjalankan sudo npm install aws-sdktetapi ketika saya menjatuhkan sudobagian dan menjalankannya npm install aws-sdkberfungsi.
Kyle Bridenstine
bagi saya tidak ada selain pengaturan npm config set strict-ssl falsetidak berfungsi. Saya merasa ini adalah sesuatu yang harus dilihat dan didokumentasikan oleh tim node.jsdan npmtim dengan penyelesaian yang tepat jika tidak dapat diperbaiki untuk mereka.
RinoTom
23

yang mungkin terjadi adalah perusahaan Anda mendekripsi lalu lintas tertentu dan mengenkripsinya kembali dengan sertifikat mereka (yang mungkin sudah Anda miliki di rantai kunci atau sertifikat dasar tepercaya)

jika Anda menggunakan node 7 atau yang lebih baru, saya telah menemukan perbaikan ini agar kompatibel dengan node dan node-gyp (untuk Windows Anda harus melakukan ini secara berbeda, tetapi pada dasarnya Anda hanya perlu menambahkan variabel lingkungan ini):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (di Windows Anda mungkin perlu menghapus tanda kutip - lihat komentar)

file pem dapat memiliki banyak sertifikat: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

pastikan sertifikat Anda dalam format pem yang tepat (Anda perlu jeda baris yang sebenarnya, bukan literal \n )

Sepertinya saya tidak bisa membuatnya bekerja dengan jalur relatif ( .atau~ )

Perbaikan ini pada dasarnya memberi tahu npm dan node-gyp untuk menggunakan pemeriksaan terhadap CA biasa, tetapi juga mengizinkan sertifikat ini ketika menemukannya

Idealnya, Anda dapat menggunakan sertifikat tepercaya sistem Anda, tetapi sayangnya tidak demikian.

Yordania
sumber
Bagus. Pilih penjelasan rinci Anda. Membantu saya untuk lebih memahami. Info bagus.
vissu
2
Di Windows, jalur tidak berfungsi kecuali saya menghapus tanda kutip.
Chris Anderson
1
Saya memiliki masalah ini karena BlueCoat dan saya harus merujuk jawaban Anda setiap beberapa bulan. Jelas merupakan solusi yang lebih baik daripada menonaktifkan SSL ketat — terima kasih!
Jordan Grey
Di mana saya dapat menemukan file .pem di Windows. Saya mencari seluruh HardDisk untuk file pem yang ditemukan beberapa level jauh di dalam Windows \ System32. Tapi itu tidak berhasil
Sanchit Jain
10

Mengubah URL repo NPM ke HTTP berfungsi sebagai perbaikan cepat, tetapi saya ingin menggunakan HTTPS.

Dalam kasus saya, proxy di perusahaan saya (ZScaler) menyebabkan masalah (karena berfungsi sebagai MITM, menyebabkan masalah verifikasi sertifikasi)

Saya lupa saya menemukan skrip yang membantu dengan ini dan Git (untuk mengkloning repo GitHub melalui HTTPS memiliki masalah yang sama) dan mem - forknya untuk saya gunakan

Pada dasarnya, ini melakukan hal berikut untuk git:

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

dan untuk Node, ditambahkan proxy=http://gateway.zscaler.net:80/ke akhirc:\Users\$USERNAME\npm\.npmrc

Itu memecahkan masalah saya.

Robert Dundon
sumber
2
Anda mungkin ingin memeriksa ZS cloud tempat perusahaan Anda dikonfigurasi. Pada dasarnya, periksa ip.zscaler.comnama cloud dan setel di URL. Misal: jika tertulis zscalertwo.netmaka ganti dengan URL berikut:gateway.zscalertwo.net
Rahul Bharadwaj
6

Setelah mencoba setiap solusi, saya dapat menemukan:

  • Mematikan ssl ketat: npm config set strict-ssl=false
  • Mengubah registri menjadi http, bukan https: npm config set registry http://registry.npmjs.org/
  • Mengubah pengaturan kantin saya: npm config set cafile /path/to/your/cert.pem
  • Berhenti menolak CA yang tidak dikenal: set NODE_TLS_REJECT_UNAUTHORIZED=0

Solusi yang tampaknya bekerja paling baik untuk saya sekarang adalah dengan menggunakan variabel lingkungan NODE_EXTRA_CA_CERTS yang memperluas CA yang ada daripada menggantinya dengan opsi cafile di file .npmrc Anda. Anda dapat mengaturnya dengan memasukkan ini di terminal Anda:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Tentu saja, mengatur variabel ini setiap saat dapat mengganggu, jadi saya menambahkannya ke profil bash saya sehingga akan diatur setiap kali saya membuka terminal. Jika Anda belum memiliki ~/.bash_profilefile, buatlah. Kemudian di akhir file itu tambahkan export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Kemudian, hapus pengaturan cafile di .npmrc Anda.

RyanDay
sumber
Pilihan keempat adalah pesona; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt
5

Percayalah, ini akan berhasil untuk Anda:

    npm config set registry http://registry.npmjs.org/  
Prashanth Keshanna
sumber
Meskipun tautan ini mungkin menjawab pertanyaan, lebih baik menyertakan bagian penting dari jawaban di sini dan menyediakan tautan untuk referensi. Jawaban link saja bisa menjadi tidak valid jika halaman tertaut berubah. Silakan baca Bagaimana Menjawab untuk membaca lebih lanjut tentang bagaimana menjawab pertanyaan
Artog
4

Punya kesalahan yang sama. Sepertinya ini terkait dengan sertifikat SSL. Jika Anda menggunakan NPM untuk paket publik (tidak memerlukan keamanan HTTPS), Anda dapat menonaktifkan validasi kunci SSL ketat dengan perintah berikut.

Ini mungkin perbaikan paling sederhana jika Anda hanya ingin menginstal beberapa paket yang tersedia untuk umum satu kali.

npm config set strict-ssl=false
Jason Geiger
sumber
5
Ada risiko yang melekat untuk melakukan ini, jika Anda adalah korban serangan man-in-the-middle yang jahat, paket tersebut dapat dimodifikasi saat Anda mengunduhnya.
Alex KeySmith
@AlexKeySith Anda benar. Namun, kemungkinannya cukup rendah. Ini mungkin satu-satunya pilihan untuk beberapa orang. Caveat Emptor
Jason Geiger
1

Saya mengalami kesalahan ini ketika saya mencoba memperbarui npm, tetapi memiliki versi yang sangat lama (1.3.6!) Diinstal dari yum di AWS Linux. Saya dapat menginstal versi npm yang lebih baru secara manual dan semuanya telah diperbaiki.

drussey
sumber
0

Kode di bawah bekerja untuk saya dengan sempurna di sini membuat http hanya sebagai gantinya https

npm config set registry http://registry.npmjs.org/  
Mohd Shariq
sumber
0

Dalam kasus saya, pada titik tertentu saya menetapkan konfigurasi global saya untuk menggunakan sertifikat yang dimaksudkan untuk sebuah proyek.

npm config list

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

Saya membuka file, menghapus baris dan npm installbekerja lagi.

joels
sumber
0

mendapat kesalahan di bawah ini

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR! kode UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! salah UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! permintaan ke https://registry.npmjs.org/vue gagal, alasan: tidak bisa mendapatkan sertifikat penerbit lokal

npm ERR! Log lengkap dari proses ini dapat ditemukan di: 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

Perintah di bawah ini memecahkan masalah:

npm config set strict-ssl false
Chatrughan Prasad
sumber