Ketika saya mencoba menginstal paket dengan npm, itu tidak berhasil. Setelah menunggu lama, saya akhirnya mendapatkan error 'tunneling socket tidak dapat dibuat, sutatusCode = 403'.
$ npm install coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
npm ERR! at ClientRequest.onConnect (c:\Program Files\nodejs\node_modules\npm\node_modules\request\tunnel.js:148:19)
npm ERR! at ClientRequest.g (events.js:193:14)
npm ERR! at ClientRequest.EventEmitter.emit (events.js:123:20)
npm ERR! at Socket.socketOnData (http.js:1393:11)
npm ERR! at TCP.onread (net.js:403:27)
Namun, ketika saya menjelajah ke URL yang sama di browser web saya (Google Chrome) itu memuat dengan baik (lihat catatan kaki). https://registry.npmjs.org/coffee-script
Apa yang salah?
Meskipun saya menggunakan proxy https, saya yakin ini bukan masalahnya. Saya telah mengkonfigurasi variabel lingkungan https_proxy
(sesuai panduan pengguna npm ). Saya tahu variabel lingkungan benar, karena pengelola paket Python pip
mengikutinya dengan benar.
Saya yakin masalahnya terkait dengan sertifikat SSL, karena jika saya mengunduh URL itu dengan wget
, saya mendapatkan kesalahan eksplisit tentang sertifikat
$ wget https://registry.npmjs.org/coffee-script
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2012-12-17 12:14:07-- https://registry.npmjs.org/coffee-script
Resolving corpproxy... 10.254.215.35
Connecting to corpproxy|10.254.215.35|:8080... connected.
ERROR: cannot verify registry.npmjs.org's certificate, issued by `/C=US/ST=CA/L=Oakland/O=npm/OU=npm Certificate Authority/CN=npmCA/[email protected]':
Unable to locally verify the issuer's authority.
To connect to registry.npmjs.org insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.
Bagaimana cara memperbaikinya? Tanpa mengorbankan keamanan.
Saya biasanya mendapatkan kesalahan sertifikat SSL di browser web saya juga, sampai saya menginstal sertifikat 'npmCA' sebagai 'otoritas sertifikasi akar tepercaya' di Opsi Internet Panel Kontrol (tangkapan layar )
Sunting: Saya mencoba solusi yang tidak aman per https://npmjs.org/doc/config.html#strict-ssl
npm set strict-ssl false
Namun masih ada waktu dengan kesalahan yang sama
$ npm install coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
Jawaban:
TL; DR - Jalankan saja ini dan jangan nonaktifkan keamanan Anda:
Ganti sertifikat yang ada
atau perpanjang sertifikat yang ada
Setel variabel lingkungan ini untuk memperluas sertifikat yang ditentukan sebelumnya:
NODE_EXTRA_CA_CERTS
menjadi"<path to certificate file>"
Cerita lengkap
Saya harus bekerja dengan npm, pip, maven dll. Di belakang firewall perusahaan di bawah Windows - ini tidak menyenangkan. Saya akan mencoba dan menjaga platform ini agar tetap agnostik / waspada jika memungkinkan.
HTTP_PROXY & HTTPS_PROXY
HTTP_PROXY
&HTTPS_PROXY
adalah variabel lingkungan yang digunakan oleh banyak perangkat lunak untuk mengetahui di mana proxy Anda. Di bawah Windows, banyak perangkat lunak juga menggunakan proxy yang ditentukan OS Anda yang merupakan hal yang sama sekali berbeda. Itu berarti Anda dapat membuat Chrome (yang menggunakan proxy yang ditentukan dalam Opsi Internet Anda) menyambungkan ke URL dengan baik, tetapi npm, pip, maven dll. Tidak berfungsi karena mereka menggunakan HTTPS_PROXY (kecuali jika mereka menggunakan HTTP_PROXY - lihat nanti). Biasanya variabel lingkungan akan terlihat seperti ini:Tetapi Anda mendapatkan 403 yang menunjukkan bahwa Anda tidak diautentikasi terhadap proxy Anda. Jika ini adalah otentikasi dasar pada proxy, Anda akan ingin menyetel variabel lingkungan ke sesuatu dalam bentuk:
NTLM yang ditakuti
Ada kode status HTTP 407 (diperlukan autentikasi proxy), yang merupakan cara yang lebih tepat untuk mengatakan bahwa itu adalah proxy daripada server tujuan yang menolak permintaan Anda. Kode itu mengganggu saya untuk waktu yang lama sampai setelah banyak waktu di Google, saya mengetahui proxy saya menggunakan otentikasi NTLM . Otentikasi dasar HTTP tidak cukup untuk memenuhi proxy apa pun yang dipasang oleh tuan perusahaan saya. Saya terpaksa menggunakan Cntlm di mesin lokal saya (tidak diautentikasi), lalu menangani otentikasi NTLM dengan proxy upstream. Kemudian saya harus memberi tahu semua program yang tidak dapat melakukan NTLM untuk menggunakan mesin lokal saya sebagai proxy - yang umumnya sesederhana pengaturan
HTTP_PROXY
danHTTPS_PROXY
. Jika tidak, untuk penggunaan npm (seperti yang disarankan @Agus):"Kami perlu mendekripsi semua lalu lintas HTTPS karena virus"
Setelah pengaturan ini bersenandung (kikuk) selama sekitar satu tahun, tuan perusahaan memutuskan untuk mengubah proxy. Tidak hanya itu, tetapi tidak lagi menggunakan NTLM! Dunia baru yang berani pasti. Tetapi karena para penulis perangkat lunak berbahaya itu sekarang mengirimkan malware melalui HTTPS, satu-satunya cara mereka dapat melindungi kami, pengguna yang tidak bersalah dan malang, adalah dengan mengarahkan setiap koneksi untuk memindai ancaman bahkan sebelum mereka mencapai kami. Seperti yang bisa Anda bayangkan, saya diliputi perasaan aman.
Singkat cerita, sertifikat yang ditandatangani sendiri perlu dipasang ke npm untuk menghindari
SELF_SIGNED_CERT_IN_CHAIN
:Atau, file
NODE_EXTRA_CA_CERTS
variabel lingkungan dapat disetel ke file sertifikat.Saya pikir itu semua yang saya tahu tentang mendapatkan npm untuk bekerja di belakang proxy / firewall. Semoga seseorang merasa berguna.
Sunting : Ini adalah saran yang sangat umum untuk mematikan HTTPS untuk masalah ini baik dengan menggunakan registri atau pengaturan HTTP
NODE_TLS_REJECT_UNAUTHORIZED
. Ini bukan ide yang bagus karena Anda membuka diri terhadap serangan man-in-the-middle atau pengalihan lebih lanjut. Sebuah spoof cepat dari catatan DNS Anda di mesin yang melakukan instalasi paket dan Anda akan mempercayai paket dari mana saja. Mungkin terlihat banyak pekerjaan untuk membuat HTTPS berfungsi, tetapi ini sangat disarankan. Jika Anda adalah orang yang bertanggung jawab untuk mengizinkan kode tidak tepercaya masuk ke perusahaan, Anda akan mengerti alasannya.Edit 2 : Ingatlah pengaturan itu
npm config set cafile <path>
menyebabkan npm hanya menggunakan sertifikat yang disediakan dalam file itu, alih-alih memperluas yang sudah ada dengannya.Jika Anda ingin memperluas sertifikat yang ada (misalnya dengan sertifikat perusahaan) menggunakan variabel lingkungan
NODE_EXTRA_CA_CERTS
untuk ditautkan ke file adalah cara yang harus dilakukan dan dapat menghemat banyak kerumitan. Lihat cara-menambahkan-custom-certificate-authority-ca-to-nodejssumber
=
npm config set cafile "<path to your certificate file>"
Masalah ini telah diperbaiki untuk saya dengan menggunakan repositori versi http:
sumber
memecahkan masalah untuk saya. Dalam hal ini agen dan penyimpanan artefak saya berada di belakang subnet pribadi di cloud aws
sumber
Saya mengalami masalah yang sama, saya mengatasi penggunaan
Info tambahan di node-doc
sumber
Saya kebetulan mengalami masalah SSL serupa ini beberapa hari yang lalu. Masalahnya adalah npm Anda tidak menyetel sertifikat root untuk sertifikat yang digunakan oleh https://registry.npmjs.org .
Solusi:
wget https://registry.npmjs.org/coffee-script --ca-certificate=./DigiCertHighAssuranceEVRootCA.crt
untuk memperbaiki masalah wgetnpm config set cafile /path/to/DigiCertHighAssuranceEVRootCA.crt
untuk menyetel sertifikat root untuk program npm Anda.Anda dapat mengunduh sertifikat root dari:
https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt
Memperhatikan: Program yang berbeda mungkin menggunakan cara berbeda dalam mengelola sertifikat root, jadi jangan gabungkan browser dengan yang lain.
Analisis:
mari kita perbaiki
wget https://registry.npmjs.org/coffee-script
masalahmu dulu. cuplikan Anda mengatakan:Ini berarti program wget Anda tidak dapat memverifikasi
https://registry.npmjs.org
sertifikat. Ada dua alasan yang dapat menyebabkan masalah ini:Jadi solusinya secara eksplisit menetapkan sertifikat root untuk
https://registry.npmjs.org
. Kita dapat menggunakan openssl untuk memastikan bahwa alasan di bawah ini adalah masalahnya.Coba
openssl s_client -host registry.npmjs.org -port 443
pada baris perintah dan kita akan mendapatkan pesan ini (beberapa baris pertama):Baris ini
verify error:num=20:unable to get local issuer certificate
memastikan bahwahttps://registry.npmjs.org
tidak mengemas sertifikat root. Jadi kami GoogleDigiCert High Assurance EV Root CA
root Certificate.sumber
Saya mengalami masalah yang sama. Setelah beberapa penggalian, saya menyadari bahwa banyak skrip pasca / pra-instal akan mencoba menginstal berbagai dependensi dan beberapa kali repositori tertentu digunakan. Cara yang lebih baik adalah menonaktifkan pemeriksaan sertifikat untuk modul https untuk nodejs yang berfungsi untuk saya.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
Dari pertanyaan ini
sumber
Masalahnya terletak pada proxy Anda. Karena penyedia lokasi paket pemasangan Anda membuat sertifikatnya sendiri dan tidak membeli sertifikat terverifikasi dari otoritas yang diterima, proxy Anda tidak mengizinkan akses ke host yang ditargetkan. Saya berasumsi bahwa Anda melewati proxy saat menggunakan Browser Chrome. Jadi tidak ada pengecekan.
Ada beberapa solusi untuk masalah ini. Tetapi semua menyiratkan bahwa Anda mempercayai penyedia paket.
Solusi yang memungkinkan:
http://
akses yang mungkin melewati proxy Anda. Itu agak berbahaya, karena orang di tengah dapat menyuntikkan malware ke unduhan Anda.wget
menyarankan Anda untuk menggunakan sebuah bendera--no-check-certificate
. Ini akan menambahkan arahan proxy ke permintaan Anda. Proksi, jika memahami arahan, tidak memeriksa apakah sertifikat server diverifikasi oleh otoritas dan meneruskan permintaan. Mungkin ada konfigurasi dengan npm yang melakukan hal yang sama dengan flag wget.sumber
setel properti di bawah ini:
"npm config set strict-ssl false"
sumber
Inilah yang dapat Anda lakukan untuk menghindari npm dan menggunakan mesin benang di jendela.
sumber
Jika Anda memiliki kendali atas server proxy atau dapat meyakinkan admin TI Anda, Anda dapat mencoba mengecualikan registry.npmjs.org secara eksplisit dari pemeriksaan SSL. Ini akan menghindari pengguna server proxy dari keharusan menonaktifkan pemeriksaan strict-ssl atau menginstal CA root baru.
sumber