Empfangsfehler: 'Fehler: SSL-Fehler: SELF_SIGNED_CERT_IN_CHAIN' bei Verwendung von npm

292

Ich verwende npm v1.0.104 / node 0.6.12 unter Ubuntu. Beim Versuch, neue Module über npm zu installieren, wird der unten kopierte Fehler angezeigt haben zu einem Problem mit npm / nicht signierten Zertifikaten geführt). Der Fehler wird angezeigt, sobald npm versucht, die URL " https://registry.npmjs.org " aufzulösen . Gibt es sowieso ich kann den Fehler ignorieren oder vielleicht das Zertifikat zu einem vertrauenswürdigen Speicher suchen / hinzufügen, um weiterhin npm zu verwenden.

Jeder Einblick in die Maßnahmen zur Behebung des Problems wird geschätzt (ich würde es vorziehen, das Problem durch Konfiguration zu beheben, anstatt es nach Möglichkeit neu zu installieren).

Fehler: "Fehler: SSL-Fehler: SELF_SIGNED_CERT_IN_CHAIN"

Vollständige Nachricht:

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
quelle
1
Entfernen Sie kein striktes SSL. Werfen
nolim1t
15
Ab dem 27. Februar 2014 unterstützt npm seine selbstsignierten Zertifikate nicht mehr. Weitere Informationen finden Sie im Blog-Beitrag von npm oder in der aktuellen Antwort unten.
Kevin Reilly
1
Falls Sie Probleme mit AWS Elastic Beanstalk haben, finden Sie hier eine Lösung: stackoverflow.com/questions/22096459/…
Guillaume Flandre
1
nolim1t : Dies behebt nicht die Ursache des Problems, und Kevin : Die Befehle im Blog-Beitrag sind unvollständig. Unter stackoverflow.com/a/22099006/106302 finden Sie Befehle, die für mich funktioniert haben.
Wir sind alle Monica
1
@ali BITTE ändern Sie die 'Akzeptierte Antwort'. Dieses Problem tritt aufgrund eines npm-Upgrades auf und nicht aufgrund eines Problems mit SSL. Das Deaktivieren von SSL ist SCHLECHT, insbesondere da die derzeit richtige Antwort darin besteht, npm zu aktualisieren. Die Antwort von Kevin Reilly sollte die akzeptierte Antwort sein. Danke.
Mikezx6r

Antworten:

391

Durch Ausführen der folgenden Schritte konnte das Problem behoben werden:

npm config set strict-ssl false

Ich kann nicht kommentieren, ob dies zu diesem Zeitpunkt andere Probleme verursachen wird. Ich hoffe es hilft.

Ali Haider
quelle
39
run „npm Konfig.satz ca null“ statt, ssl Fehler zu ignorieren , ist eine schlechte Idee
alex
6
@SnowInferno SSL garantiert auch, dass Sie mit der echten registry.npmjs.org sprechen. Jemand könnte möglicherweise schädliche Pakete installieren.
Adotout
58
Das ist schmutzig falsch. Warum stören Sie sich überhaupt an der Verwendung von SSL, wenn Sie es jedes Mal ausschalten, wenn es das tut, was es tun soll? "Jedes Mal, wenn das Ignorieren eines Fehlers zum Erfolg führt, werden Entwickler genau das tun."
Djechlin
20
Bitte ignorieren Sie SSL-Probleme nicht, da der Fehler aus einem sehr guten Grund vorliegt. Ein bisschen Suchen ergab auch den folgenden Tweet, der auf die offizielle Lösung Ihres Problems
verweist
41
Mein Problem wurde durch einen Proxy verursacht, hinter dem ich stehe. "Npm config set ca null" und "npm config set ca" "gaben mir immer noch den gleichen Fehler, aber das Entfernen von SSL funktionierte einwandfrei. Manchmal ist eine gute Praxis nicht so wichtig wie das, was tatsächlich funktioniert.
Cory Schulz
220

Ab dem 27. Februar 2014 unterstützt npm seine selbstsignierten Zertifikate nicht mehr . Die folgenden von npm empfohlenen Optionen führen eine der folgenden Aktionen aus:

Aktualisieren Sie Ihre Version von npm

npm install npm -g --ca=""

-- ODER --

Teilen Sie Ihrer aktuellen Version von npm mit, dass bekannte Registrare verwendet werden sollen

npm config set ca ""

Update: npm hat mehr Hilfe mit SELF_SIGNED_CERT_IN_CHAIN ​​und npm mit mehr Lösungen für verschiedene Umgebungen veröffentlicht



Möglicherweise müssen Sie sudoden Empfehlungen vorangestellt werden oder nicht .


Andere Optionen

Es scheint, dass Menschen Probleme haben, die Empfehlungen von npm zu verwenden. Hier sind einige andere mögliche Lösungen.

Aktualisieren des Knotens selbst
Wenn Sie diesen Fehler erhalten, wird möglicherweise eine ältere Version des Knotens angezeigt, die natürlich mit einer älteren Version von npm geliefert wird. Eine Lösung besteht darin, Ihre Node-Version zu aktualisieren. Dies ist wahrscheinlich die beste Option, da sie Sie auf den neuesten Stand bringt und vorhandene Fehler und Schwachstellen behebt.

Der Vorgang hier hängt davon ab, wie Sie Node, Ihr Betriebssystem und andere Komponenten installiert haben.

Update npm
Da Sie wahrscheinlich beim Versuch installeines Pakets hierher gekommen sind , ist es möglich, dass dies npm install npm -gmit demselben Fehler fehlschlägt. Wenn dies der Fall ist, verwenden Sie updatestattdessen. Wie von Nisanth Sojan vorgeschlagen:

npm update npm -g

Npm-Alternative aktualisieren
Eine Möglichkeit, das zugrunde liegende Problem zu umgehen, besteht darin, bekannte Registrare zu verwenden, zu installieren und dann die Verwendung bekannter Registrare zu beenden. Wie von jnylen vorgeschlagen:

npm config set ca ""
npm install npm -g
npm config delete ca
Kevin Reilly
quelle
10
Die einfachste Lösung besteht wahrscheinlich darin, die neueste Version von Nodejs selbst herunterzuladen. Sie enthält eine neue Version von npm, in der dieses Problem behoben ist. Keiner der oben genannten Befehle hat bei mir funktioniert.
Strille
1
Ich gehe mit dieser Lösung, da es die erste ist, die SSL nicht ignoriert (indem Sie entweder die Prüfung in der Konfiguration auf false setzen oder stattdessen http verwenden). Vielen Dank!
hcpl
12
npm install npm -g gibt mir auch den Fehler SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm
3
Wenn dies nicht funktioniert, führen Sie npm config set ca ""zuerst ein Upgrade durch und machen Sie dann die Konfigurationsänderung rückgängig. Siehe: stackoverflow.com/a/22099006/106302
Wir sind alle Monica
1
@Redsandro sudoändert den Benutzer. Das -gFlag setzt, ob es für diesen Benutzer global oder nur lokal installiert werden soll node_modules.
Radek
68

Im Moment habe ich gerade die Registrierungs-URL von https auf http umgestellt. So was:

npm config set registry="http://registry.npmjs.org/"
Hermann
quelle
1
Arbeitete wie ein Zauber für mich. Ich wollte die ursprüngliche Zertifizierungsstelle nicht verlieren oder zwingen, SSL-Fehler zu ignorieren.
SnowInferno
Hat perfekt funktioniert. Vielen Dank!
Muhammed Basilikum
13
Das Deaktivieren der Sicherheit kann nicht die Lösung sein!
Alessandro Pezzato
1
Ich hatte dies zuvor verwendet, aber aus irgendeinem Grund hat das Zurückschalten von 'http: //' auf 'https: //' meine wieder zum Laufen gebracht.
Kshreve
Nachdem ich alle anderen Lösungen ausprobiert hatte, funktionierte diese für mich endlich :-)
Swapnil Kadu
49
npm config set strict-ssl false -g

Um es global zu speichern

Robin
quelle
Wenn ich das tue, bekomme ich den berüchtigten cb() never called!npm-Fehler
Jeremy
Nach dieser Einstellung wird unter Fehler npm ERR geetet! Code E401 npm ERR! Authentifizierung nicht möglich, erforderlich: Verhandeln, NTLM npm ERR! Ein vollständiges Protokoll dieses Laufs finden Sie in: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi
31

Sie müssen npm aktualisieren.

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

Möglicherweise müssen Sie diesen Befehlen ein Präfix voranstellen sudo.

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

Wir sind alle Monica
quelle
@ Oliver Salzburg: re. Ihre Bearbeitung: Unter OS XI glaube ich nicht, dass sudodies überhaupt erforderlich ist, und nur das Präfixieren des Upgrade-Befehls mit sudohat für mich gut funktioniert. YMMV.
Wir sind alle Monica
Ah, das hat bei mir funktioniert. Vielen Dank für die spezifischen Anweisungen zum Rückgängigmachen der Konfigurationsänderung (damit ich sie nicht selbst ausgraben musste)!
Matt
Interessant. Ich habe die Bearbeitung erst vorgenommen, nachdem ich sie auf einem Debian-Server getestet habe. Ich mag die aktuelle Revision allerdings;)
Der Hochstapler
Ubuntu / Debian erfordern zusätzliche Links, siehe meine Antwort unten.
Redsandro
2
Dies sollte die akzeptierte Lösung sein. Dies deaktiviert die Sicherheit nicht und ist die "offizielle" Lösung, die im npm-Blog beschrieben wird.
Alessandro Pezzato
21

Der Fehler SELF_SIGNED_CERT_IN_CHAINbedeutet, dass Sie ein selbstsigniertes Zertifikat in der Zertifikatkette haben, dem das System grundsätzlich nicht vertraut.

In diesem Fall ist im Grunde genommen etwas faul, daher wird, wie bereits erwähnt, nicht empfohlen, nur die Zertifikatsprüfungen zu deaktivieren, sondern besser zu verstehen, wo das Problem liegt, und die Ursache dafür zu beheben.

Dies kann entweder zusammenhängen mit:

  • benutzerdefinierte Repository-Adresse, die nicht über das richtige Zertifikat verfügt,

  • ein Unternehmensnetzwerk mit transparentem Proxy.

    Wenn Sie sich hinter einem Unternehmens-Webproxy befinden, sollten Sie die richtigen HTTP_PROXY/ HTTPS_PROXYUmgebungsvariablen einrichten oder über Folgendes festlegen npm:

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

    Siehe: Einrichten von Node.js und Npm hinter einem Unternehmens-Webproxy

Wenn Sie dem Host vertrauen, können Sie das selbstsignierte Zertifikat aus der Kette exportieren und in das System importieren, sodass sie als vertrauenswürdig markiert sind.

Dies kann erreicht werden, indem die Zertifikate überprüft werden durch (Wechsel example.comin npm repo, das aufgrund der fehlschlägt npm-debug.log):

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

Speichern Sie dann den Zertifikatinhalt (zwischen BEGINund END) in einer .crtDatei, um ihn zu importieren.

Linux

Gemäß Vorschlag , können Sie exportierte Zertifikat in hinzufügen /etc/environmentDatei (Knoten 7.4+), wie:

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

CentOS

Unter CentOS 5 kann dies in eine /etc/pki/tls/certs/ca-bundle.crtDatei eingefügt werden, z

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

Hinweis: Um nur das erste Zertifikat zu exportieren, entfernen Sie es gam Anfang.

In CentOS 6 kann die Zertifikatdatei in kopiert werden /etc/pki/ca-trust/source/anchors/.

Ubuntu / Debian

Kopieren Sie in Ubuntu / Debian die CRT-Datei in /usr/local/share/ca-certificates/ und führen Sie sie aus:

sudo update-ca-certificates

Mac OS

In macOS können Sie Folgendes ausführen:

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

Windows

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


Siehe auch: npm - Fehlerbehebung - SSL-Fehler

Kenorb
quelle
1
> Wenn dies der Fall ist, müssen Sie das selbstsignierte Zertifikat aus der Kette exportieren und in das System importieren, damit sie als vertrauenswürdig markiert werden. - Macht mir einen Trick.
dmi3y
2
Großartig! Es ist auch hilfreich, NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchor / yourCerts.pem zur / etc / -Umgebung hinzuzufügen. Knoten 7.4+ berücksichtigt dies
ph4r05
9

Dies vor den Befehl zu stellen scheint zu funktionieren NODE_TLS_REJECT_UNAUTHORIZED=0. Ex:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Es ist am besten herauszufinden, wie der Knoten das selbstsignierte Zertifikat als gültig ansieht. Der obige strikte SSL-Vorschlag hat aus irgendeinem Grund bei mir nicht funktioniert. Wenn Sie die Auswirkungen auf die Sicherheit verstehen und eine vorübergehende schnelle Lösung benötigen, habe ich dies bei einigen zufälligen Github-Problemen während der Google-Suche nach dem Fehler festgestellt .

Adam Lane
quelle
1
Verwenden Sie unter Windows "set NODE_TLS_REJECT_UNAUTHORIZED = 0". Und dann funktioniert es wie ein Zauber !!
Tarun
8

Das Repository unterstützt keine selbstsignierten Zertifikate mehr. Sie müssen ein Upgrade durchführen 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

Sie müssen eine neue Terminalsitzung öffnen, um die aktualisierte verwenden zu können npm.

Quelle: Dies war ursprünglich eine Bearbeitung von jnylens Antwort. Obwohl in den Richtlinien steht: "Wir begrüßen alle konstruktiven Änderungen, aber machen Sie sie bitte erheblich", wurde die Bearbeitung aufgrund von "Diese Änderung ändert sich im ursprünglichen Beitrag zu stark; die ursprüngliche Bedeutung oder Absicht des Beitrags würde verloren gehen." Ich denke, die Community bevorzugt eine separate Antwort.

Redsandro
quelle
Das hat bei mir funktioniert. Den letzten Befehl brauchte ich allerdings nicht : sudo ln -s /usr/bin/nodejs /usr/bin/node.
Abwesenheit
1
Dies hängt wahrscheinlich davon ab, ob Sie über die offiziellen Ubuntu-Repositorys, ein Repository eines Drittanbieters (für eine neuere Version) oder selbst kompiliert (für die neueste Version) installiert haben.
Redsandro
7

Für diejenigen, die auf einem Mac mit dem gleichen Problem npm über Homebrew installiert haben :

brew uninstall npm

dann

brew install npm

Funktioniert für mich unter osx (10.9.1)

BEARBEITEN : Möglicherweise müssen Sie brew updatevor der Installation von npm. Sie können auch eine brew upgradenach dem Update Homebrew durchführen. Es kann auch hilfreich sein, es auszuführen, brew doctorwenn Sie auf andere Probleme stoßen.

Patrick
quelle
4

Schnelle und saubere Lösung (Linux getestet) (Nach Fatidic 27. Februar 2014)


Deinstallieren Sie npm

npm rm npm -g

Installieren Sie npm (neue URL lautet www.npmjs.org statt npmjs.org )

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

Tipp : So installieren Sie node.js unter Linux https://stackoverflow.com/a/22099363/333061

Igor Parra
quelle
Der Befehl funktioniert aufgrund einer Umleitung 301 nicht mehr. Sie können jedoch https://www.npmjs.org/install.shIhren Browser eingeben und herunterladen, bevor Sie ihn manuell ausführen.
Svassr
Oder laufen Sie Curl mit der -L Flagge
Evan Cordell
Der vorherige curl https://npmjs.org/install.shBefehl leitet um https://www.npmjs.org/install.sh, weshalb dies curl https://www.npmjs.org/install.sh | shnahtlos funktioniert. ist in Ordnung, ab sofort auf kleinen Padawan zu installieren. :)
Igor Parra
2

Das Deaktivieren von SSL scheint eine zutiefst schlechte Idee zu sein. Der Blog von npm erklärt, dass sie ihr selbstsigniertes Zertifikat nicht mehr unterstützen. Sie schlagen vor, npm über zu aktualisieren npm install npm -g, aber ich habe natürlich den gleichen SELF_SIGNED_CERT_IN_CHAIN-Fehler. Also habe ich gerade den Knoten aktualisiert, der npm zusammen mit ihm aktualisiert hat. Die genaue Vorgehensweise hängt davon ab, wie Sie den Knoten zuerst installiert haben.

Jeremiah Orr
quelle