alma hatası: npm kullanırken 'Hata: SSL Hatası: SELF_SIGNED_CERT_IN_CHAIN'


292

Ubuntu üzerinde npm v1.0.104 / düğüm 0.6.12 kullanıyorum - npm aracılığıyla herhangi bir yeni modül yüklemeye çalışırken aşağıda kopyalanan hatayı alıyorum (daha önce http kullanarak https değil, https değil, https kullanarak değil, acele edip edemeyeceğim npm / unsigned certs ile ilgili sorunla sonuçlandı). Npm ' https://registry.npmjs.org ' URL'sini çözmeye çalıştığında hata ortaya çıkar . Yine de npm kullanmaya devam etmek için hatayı yok sayabilir veya belki bulmak / güvenilir bir mağazaya eklemek ekleyebilirsiniz.

Sorunu çözmek için ne yapılması gerektiğine dair herhangi bir fikir takdir edilecektir (mümkünse yeniden yükleme yerine konfigürasyon yoluyla sorunu çözmeyi tercih ederim).

Hata: "Hata: SSL Hatası: SELF_SIGNED_CERT_IN_CHAIN"

Tam Mesaj:

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
Sıkı SSL'yi kaldırmayın. Göz at stackoverflow.com/a/16534065
nolim1t

15
27 Şubat 2014 itibariyle npm artık kendi imzasını taşıyan sertifikalarını desteklememektedir. Daha fazla bilgi için lütfen npm'in blog yayınına veya aşağıdaki son cevaba bakın.
Kevin Reilly

1
AWS Elastik Beanstalk'ta bununla ilgili sorun yaşıyorsanız, burada bir çözüm bulabilirsiniz: stackoverflow.com/questions/22096459/…
Guillaume Flandre

1
nolim1t : bu sorunun nedenine değinmez ve Kevin : blog gönderisindeki komutlar eksiktir. Benim için çalışan komutlar için stackoverflow.com/a/22099006/106302 adresine bakın .
Hepimiz Monica

1
@ali LÜTFEN 'Kabul edilen yanıt'ı değiştirin Bu sorun SSL ile ilgili bir sorun değil, npm yükseltmesi nedeniyle ortaya çıkıyor. SSL'yi kapatmak KÖTÜdür ve özellikle şu anda doğru yanıt npm'yi güncellemek olduğundan. Kevin Reilly'nin cevabı Kabul Edilen cevap olmalıdır. Teşekkür ederim.
Mikezx6r

Yanıtlar:


391

Aşağıdakileri çalıştırmak sorunu çözmenize yardımcı oldu:

npm config set strict-ssl false

Bu noktada başka sorunlara neden olup olmayacağı konusunda yorum yapamam. Umarım yardımcı olur.


39
bunun yerine "npm config set ca null" komutunu çalıştırın, ssl hatalarını göz ardı etmek kötü bir fikirdir
alex

6
@SnowInferno SSL ayrıca gerçek register.npmjs.org ile konuştuğunuzu da garanti eder. Birisi potansiyel olarak kötü amaçlı paketler yükleyebilir.
adotout

58
Bu kesinlikle yanlış. Neden her seferinde ne yaparsa onu kapatmayı seçiyorsan, SSL kullanmayı bile rahatsız ediyorsun? "Bir hatayı göz ardı etmek her zaman başarıya yol açar, geliştiriciler tam da bunu yapar."
djechlin

20
Hata çok iyi bir nedenden dolayı orada olduğundan, lütfen ssl sorunlarını görmezden gelmeyin. Ayrıca, biraz arama yapmak, sorununuza resmi çözümle bağlantı kuran aşağıdaki tweet ile sonuçlandı (güncelleme npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest

41
Sorunum, arkamda olduğum bir proxy'den kaynaklandı, "npm config set ca null" ve 'npm config set ca ""' hala bana aynı hatayı verdi, ancak SSL'yi kaldırmak mükemmel çalıştı. Bazen iyi uygulama gerçekten işe yarayan şey kadar önemli değildir.
Cory Schulz

220

27 Şubat 2014 itibariyle, npm artık kendi imzasını taşıyan sertifikalarını desteklememektedir . Npm tarafından önerilen aşağıdaki seçenekler, aşağıdakilerden birini yapmak içindir:

Npm sürümünüzü yükseltin

npm install npm -g --ca=""

- VEYA -

Geçerli npm sürümünüze bilinen kayıt şirketlerini kullanmasını söyleyin

npm config set ca ""

Güncelleme: npm, SELF_SIGNED_CERT_IN_CHAIN ​​ve npm ile ilgili olarak farklı ortamlara özgü daha fazla çözümle ilgili daha fazla yardım gönderdi



sudoÖnerilerin başına başlamanız gerekebilir veya gerekmeyebilir .


Diğer seçenekler

İnsanların npm'in önerilerini kullanarak sorun yaşadıkları anlaşılıyor, işte burada başka potansiyel çözümler.

Düğümün kendisini yükseltme
Bu hatayı almak, doğal olarak npm'nin daha eski bir sürümüyle gelen eski bir düğüm sürümünüz olduğunu gösterebilir. Bir çözüm Düğüm sürümünüzü yükseltmektir. Bu, sizi güncel hale getirdiği ve mevcut hataları ve güvenlik açıklarını giderdiği için muhtemelen en iyi seçenektir.

Buradaki işlem, Düğüm'ü, işletim sisteminizi ve diğerlerini nasıl yüklediğinize bağlıdır.

Güncelleme npm Bir pakete
çalışırken muhtemelen buraya installgeldiğinizden, npm install npm -gaynı hatayla başarısız olabilir. Bu durumda, updatebunun yerine kullanın. Nisanth Sojan'ın önerdiği gibi:

npm update npm -g

Npm alternatifini güncelle
Temel sorunun bir yolu bilinen kayıt şirketlerini kullanmak, yüklemek ve daha sonra bilinen kayıt şirketlerini kullanmayı bırakmaktır. Jnylen tarafından önerildiği gibi:

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

10
En kolay çözüm muhtemelen Nodejs'in en son sürümünü indirmektir, bu sorunun çözüldüğü yeni bir npm sürümü içerir. Yukarıdaki komutların hiçbiri benim için çalışmadı.
Strille

1
Ben ssl görmezden değil ilk beri bu çözüm ile gitmek (ya yapılandırma config false olarak ayarlayarak veya yerine http kullanarak). Teşekkürler!
hcpl

12
npm install npm -g de bana SELF_SIGNED_CERT_IN_CHAIN ​​hatasını veriyor
Anders Bornholm

3
Bu işe yaramazsa, npm config set ca ""önce yapın, ardından yükseltin, ardından yapılandırma değişikliğini geri alın. Bakınız: stackoverflow.com/a/22099006/106302
Hepimiz Monica

1
@Redsandro sudokullanıcıyı değiştirir, -go kullanıcı için global olarak mı yoksa sadece yerel olarak mı yükleneceğini işaretler node_modules.
Radek

68

Şimdilik kayıt URL'sini https'den http'ye değiştirdim. Bunun gibi:

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

1
Benim için bir cazibe gibi çalıştı. Orijinal CA'yı kaybetmek ya da SSL hatalarını göz ardı etmek istemedim.
SnowInferno

Mükemmel çalıştı. Teşekkürler!
muhammed fesleğen

13
Güvenliği devre dışı bırakmak çözüm olamaz!
Alessandro Pezzato

1
Bunu daha önce kullanmıştım, ama nedense onu 'http: //' den 'https: //' olarak değiştirmek benimkini yeniden çalıştırdı.
kshreve

Tüm diğer çözümleri denedikten sonra, sonunda benim için bu iş :-)
Swapnil Kadu

49
npm config set strict-ssl false -g

Global olarak kaydetmek için


Bu bana rezil cb() never called!npm hatası veriyor
Jeremy

Bu ayardan sonra hata npm ERR altında geeting! kod E401 npm ERR! Kimlik doğrulaması yapılamıyor, gerek: Müzakere, NTLM npm ERR! Bu çalışmanın tam bir günlüğünü şu adreste bulabilirsiniz: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi

31

Npm değerini yükseltmeniz gerekiyor.

// 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

Bu komutların önüne ön ek eklemeniz gerekebilir sudo.

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


@Oliver Salzburg: yeniden. senin düzenleme: OS XI üzerinde hiç sudogerekli olduğunu düşünmüyorum ve sadece yükseltme komutunun ön ekini sudobenim için iyi çalıştı. YMMV.
Hepimiz Monica'yız

Ah, bu benim için çalıştı. Yapılandırma değişikliğini geri almayla ilgili özel talimatlar için teşekkürler (bu yüzden kendim kazmak zorunda kalmadım)!
Matt

İlginç. Düzenlemeyi yalnızca bir Debian sunucusunda test ettikten sonra yaptım. Mevcut revizyonu seviyorum;)
Der Hochstapler

Ubuntu / Debian ek bağlantı gerektiriyor, aşağıdaki cevabıma bakın.
Redsandro

2
Bu kabul edilen çözüm olmalıdır. Bu güvenliği devre dışı bırakmaz ve npm blogunda açıklanan "resmi" çözümdür.
Alessandro Pezzato

21

Hata SELF_SIGNED_CERT_IN_CHAIN, sertifika zincirinde temel olarak sistem tarafından güvenilmeyen kendinden imzalı bir sertifikanız olduğu anlamına gelir.

Bu olursa, temelde balık gibi bir şey oluyor, bu yüzden insanlar zaten yorumladığı gibi, sadece sertifika kontrollerini devre dışı bırakmanız önerilmez, ancak daha iyi yaklaşım sorunun ne olduğunu anlamak ve nedenini düzeltmektir.

Bu, aşağıdakilerle de ilgili olabilir:

  • doğru sertifikaya sahip olmayan özel depo adresi,

  • şeffaf proxy'li bir şirket ağı.

    Kurumsal bir web proxy'sinin arkasındaysanız, HTTP_PROXY / HTTPS_PROXYortam değişkenlerini ayarlamanız veya bunları şu yolla ayarlamanız gerekir npm:

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

    Bkz: Kurumsal web proxy'sinin arkasında Node.js ve Npm nasıl kurulur?

Ana bilgisayara güveniyorsanız, kendinden imzalı sertifikayı zincirden dışa aktarabilir ve sisteme aktarabilirsiniz, böylece güvenilir olarak işaretlenirler.

Bu, sertifikaları kontrol ederek başarılabilir ( example.comnpm repo'ya dönüş venpm-debug.log ):

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

ardından sertifika içeriğini kaydedin ( BEGIN ve ENDiçine) .crtiçe amacıyla dosyanın.

Linux

Gereğince öneri , içine verilen sertifikayı ekleyebilir /etc/environmentdosyası (Düğüm 7.4+) gibi:

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

CentOS

CentOS 5'te bu /etc/pki/tls/certs/ca-bundle.crtdosyaya eklenebilir , örn.

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

Not: Yalnızca ilk sertifikayı gvermek için başlangıçta kaldırın .

CentOS 6'da, sertifika dosyası şuraya kopyalanabilir: /etc/pki/ca-trust/source/anchors/ .

Ubuntu / Debian

Ubuntu / Debian'da CRT dosyasını içine kopyalayın ve /usr/local/share/ca-certificates/ çalıştırın:

sudo update-ca-certificates

Mac os işletim sistemi

MacOS'ta şunları çalıştırabilirsiniz:

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

pencereler

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


Ayrıca bkz: npm - Sorun Giderme - SSL Hatası


1
> Bu durumda, kendinden imzalı sertifikayı zincirden dışa aktarmanız ve sisteme almanız gerekir, böylece güvenilir olarak işaretlenirler. - Benim için hile yapar.
dmi3y

2
Harika! Ayrıca / etc / ortamına NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem öğesinin eklenmesine yardımcı olur. 7.4+ Düğümü bunu dikkate alıyor
ph4r05

9

Bunu komuttan önce koymak işe yarıyor gibi görünüyor NODE_TLS_REJECT_UNAUTHORIZED=0. örn:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Düğümün kendinden imzalı sertifikayı geçerli olarak görmesini sağlamak en iyisidir. Yukarıdaki katı-ssl önerisi bir nedenden dolayı benim için işe yaramadı. Güvenlik sonuçlarını anlarsanız ve geçici bir hızlı düzeltmeye ihtiyacınız varsa , hatanın Google araması sırasında bazı rastgele github sorunlarında bulduğum şey budur .


1
Windows için "set NODE_TLS_REJECT_UNAUTHORIZED = 0" kullanın. Ve sonra bir cazibe gibi çalışır !!
Tarun

8

Depo artık kendinden imzalı sertifikaları desteklemiyor. Yükseltmeniz gerekiyor 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

Güncellemeyi kullanmak için yeni bir terminal oturumu açmanız gerekir npm.

Kaynak: Bu aslında jnylen'in cevabındaki bir düzenlemeydi . Yönergeler "Tüm yapıcı düzenlemeleri memnuniyetle karşılıyoruz, ancak lütfen bunları önemli ölçüde yapın" dese de, "Bu düzenleme orijinal yayında çok fazla değişiyor; yayının orijinal anlamı veya amacı kaybolacaktır" nedeniyle düzenleme reddedildi . Topluluk sanırım ayrı bir cevabı tercih ediyor.


Bu benim için çalıştı. Ancak son komutu gerek yoktu: sudo ln -s /usr/bin/nodejs /usr/bin/node.
absynce

1
Muhtemelen resmi Ubuntu depolarından, üçüncü taraf deposundan (daha yeni bir sürüm için) veya kendinizi derlemenize (en yeni sürüm için) bağlıdır.
Mart'ta Redsandro

7

Bir üzerinde bu kimin için mac Aynı konu ile ve yüklü npm aracılığı homebrewleri :

brew uninstall npm

sonra

brew install npm

Osx'te benim için çalışıyor (10.9.1)

EDIT : brew updatenpm kurmadan önce yapmanız gerekebilir . Ayrıca brew upgradehomebrew güncelledikten sonra da yapabilirsiniz . Ayrıca, brew doctorbaşka sorunlarla karşılaşırsanız çalıştırmak yararlı olabilir .


4

Hızlı ve temiz çözüm (linux testinden sonra) (Fatidic'den sonra 27 Şubat 2014)


Npm'yi kaldır

npm rm npm -g

Npm'yi yükleyin (yeni URL, npmjs.org yerine www.npmjs.org'dur )

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

İpucu : Linux'ta node.js nasıl kurulur https://stackoverflow.com/a/22099363/333061


Komut, bir yönlendirme 301 nedeniyle artık çalışmıyor, ancak yine de https://www.npmjs.org/install.shtarayıcınızı yazıp manuel olarak çalıştırmadan önce indirebilirsiniz.
svassr


önceki curl https://npmjs.org/install.shkomut yeniden yönlendiriliyor https://www.npmjs.org/install.shbu yüzden curl https://www.npmjs.org/install.sh | shsorunsuz çalışıyor. küçük padawanda yüklemek için sorun yok. :)
Igor Parra


2

SSL'yi kapatmak son derece kötü bir fikir gibi görünüyor. npm'in blogu artık kendi imzalı sertifikalarını desteklemediklerini açıklıyor. Onlar aracılığıyla npm yükseltme öneririz npm install npm -g, ama tabii ki aynı SELF_SIGNED_CERT_IN_CHAIN ​​hatası var. Bu yüzden npm ile birlikte güncellenen düğümü güncelledim. Tam prosedür, düğümü ilk etapta nasıl kurduğunuza bağlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.