npm ERR! Code UNABLE_TO_GET_ISSUER_CERT_LOCALLY


117

Ich versuche alle Möglichkeiten, um eine Reaktionsanwendung zu erstellen. Ich habe es mit Maven versucht und jetzt versuche ich es mit einem Crate-React-App-Build-System von Facebook Incubators.

Als ich versuchte, den Befehl create-react-app my-appin einer npm-Umgebung auszuführen , funktionierte er auf meinem persönlichen System ohne Probleme. Aber als ich den gleichen Befehl in meiner Arbeitsumgebung ausprobiert habe, ist dieser Fehler an der Eingabeaufforderung aufgetreten

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>

1
Ich konnte es auch nicht benutzen, sudowenn ich rannte npm install aws-sdk. Laufen sudo npm install aws-sdkhat diesen Fehler für mich verursacht.
Kyle Bridenstine

Antworten:


296

Eine schnelle Lösung aus der Internetsuche war npm config set strict-ssl false, zum Glück hat es funktioniert. Als Teil meiner Arbeitsumgebung kann ich jedoch das Flag strict-ssl auf false setzen.

Später fand ich eine sichere und funktionierende Lösung,

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

Dies funktionierte perfekt und ich erhielt eine Erfolgsmeldung, Happy Hacking!indem ich das strict-ssl-Flag nicht auf false setzte.


2
Auch ich habe gerade wieder die HTTP-Version des NPM-Repositorys verwendet (im Gegensatz zu registry.npmjs.org ), da mein Arbeitsproxy Probleme verursachte (da er als MITM fungiert und Probleme bei der Zertifizierungsüberprüfung verursacht). Eines Tages werde ich es mir vorstellen aus dem Zertifikat Problem, aber ich musste nur ein Paket herunterladen, verdammt!
Robert Dundon

1
Ich dachte, ich habe diese Einstellung bereits, aber bei näherer Betrachtung hatte ich https anstelle von http ( registry.npmjs.org ). Geändert zu http und es hat funktioniert.
Ashish Bajpai

Für mich habe ich das getan, aber ich konnte es auch nicht benutzen, sudowenn ich rannte npm install aws-sdk. Laufen sudo npm install aws-sdkhat diesen Fehler für mich verursacht.
Kyle Bridenstine

Ich habe den gleichen Fehler in diesem Beitrag erhalten, also bin ich gelaufen npm config set strict-ssl falseund npm config set registry http://registry.npmjs.org/ habe immer noch den Fehler beim Laufen bekommen, sudo npm install aws-sdkaber als ich das sudoTeil fallen ließ und es einfach lief, hat npm install aws-sdkes funktioniert.
Kyle Bridenstine

für mich npm config set strict-ssl falsefunktioniert nichts anderes als die Einstellung von nicht. Ich fühle das ist etwas , das node.jsund npmTeam in und Dokument mit einer richtigen Arbeit aussehen soll um , wenn es nicht fixierbar für sie ist.
RinoTom

23

Möglicherweise entschlüsselt Ihr Unternehmen bestimmten Datenverkehr und verschlüsselt ihn erneut mit seinem Zertifikat (das Sie wahrscheinlich bereits in Ihrem Schlüsselbund oder in vertrauenswürdigen Stammzertifikaten haben).

Wenn Sie Node 7 oder höher verwenden, habe ich festgestellt, dass dieses Update mit Node und Node-Gyp kompatibel ist (für Windows müssen Sie dies anders machen, aber Sie müssen im Grunde nur diese Umgebungsvariable hinzufügen):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (In Windows müssen Sie möglicherweise die Anführungszeichen entfernen - siehe Kommentare)

Die PEM-Datei kann mehrere Zertifikate haben: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

Stellen Sie sicher, dass Ihre Zertifikate im richtigen PEM-Format vorliegen (Sie benötigen echte Zeilenumbrüche, nicht wörtlich \n).

Ich konnte es scheinbar nicht dazu bringen, mit relativen Pfaden zu arbeiten ( .oder ~)

Dieser Fix weist npm und node-gyp grundsätzlich an, die Prüfung für die regulären Zertifizierungsstellen zu verwenden, dieses Zertifikat jedoch auch zuzulassen, wenn es darauf stößt

Idealerweise können Sie die vertrauenswürdigen Zertifikate Ihres Systems verwenden, dies ist jedoch leider nicht der Fall.


Toll. Stimmen Sie für Ihre ausführliche Erklärung ab. Hat mir geholfen, besser zu verstehen. Schöne Infos.
Vissu

2
In Windows funktionierte der Pfad nur, wenn ich die Anführungszeichen entfernt habe.
Chris Anderson

1
Ich habe dieses Problem aufgrund von BlueCoat und muss alle paar Monate auf Ihre Antwort verweisen. Auf jeden Fall eine bessere Lösung als das Deaktivieren von striktem SSL - danke!
Jordan Gray

Wo finde ich die PEM-Datei in Windows? Ich habe die gesamte Festplatte nach PEM-Dateien durchsucht und einige Ebenen tief in Windows \ System32 gefunden. Aber es funktioniert nicht
Sanchit Jain

10

Das Ändern der NPM-Repo-URL in HTTP funktioniert als schnelle Lösung, aber ich wollte HTTPS verwenden.

In meinem Fall verursachte der Proxy bei meinem Arbeitgeber (ZScaler) Probleme (da er als MITM fungiert und Probleme bei der Überprüfung der Zertifizierung verursacht).

Ich habe vergessen, dass ich ein Skript gefunden habe , das dabei hilft, und Git (zum Klonen von GitHub-Repos über HTTPS hatte das gleiche Problem) und habe es für meine Verwendung gegabelt

Grundsätzlich macht es Folgendes für git:

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

und für Node wird proxy=http://gateway.zscaler.net:80/das Ende von hinzugefügtc:\Users\$USERNAME\npm\.npmrc

Das hat das Problem für mich gelöst.


2
Möglicherweise möchten Sie überprüfen, in welcher ZS-Cloud Ihr Unternehmen konfiguriert ist. Überprüfen Sie grundsätzlich ip.zscaler.comden Cloud-Namen und legen Sie diesen in der URL fest. Beispiel: Wenn es heißt, zscalertwo.netersetzen Sie es durch die folgende URL:gateway.zscalertwo.net
Rahul Bharadwaj

6

Nachdem ich jede Lösung ausprobiert hatte, die ich finden konnte:

  • Strenge SSL ausschalten: npm config set strict-ssl=false
  • Ändern der Registrierung in http anstelle von https: npm config set registry http://registry.npmjs.org/
  • Ändern meiner Cafile-Einstellung: npm config set cafile /path/to/your/cert.pem
  • Hören Sie auf, unbekannte Zertifizierungsstellen abzulehnen: set NODE_TLS_REJECT_UNAUTHORIZED=0

Die Lösung, die jetzt für mich am besten zu funktionieren scheint, besteht darin, die Umgebungsvariable NODE_EXTRA_CA_CERTS zu verwenden, die die vorhandenen Zertifizierungsstellen erweitert, anstatt sie durch die Option cafile in Ihrer .npmrc-Datei zu ersetzen. Sie können dies einstellen, indem Sie dies in Ihr Terminal eingeben:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Natürlich kann es ärgerlich sein, diese Variable jedes Mal festzulegen. Deshalb habe ich sie meinem Bash-Profil hinzugefügt, damit sie bei jedem Öffnen des Terminals festgelegt wird. Wenn Sie noch keine ~/.bash_profileDatei haben, erstellen Sie eine. Dann am Ende dieser Datei hinzufügen export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Entfernen Sie dann die Cafile-Einstellung in Ihrer .npmrc.


Die vierte Option war ein Zauber; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
Tomdemuyt

5

Vertrauen Sie mir, das wird für Sie funktionieren:

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

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. Bitte konsultieren Sie How to Answer , um mehr darüber zu
erfahren,

4

Hatte den gleichen Fehler. Sieht so aus, als ob es sich um SSL-Zertifikate handelt. Wenn Sie NPM für öffentliche Pakete verwenden (benötigen Sie nicht die Sicherheit von HTTPS), können Sie die strikte SSL-Schlüsselüberprüfung mit dem folgenden Befehl deaktivieren.

Dies ist möglicherweise die einfachste Lösung, wenn Sie nur einige öffentlich verfügbare Pakete einmal installieren möchten.

npm config set strict-ssl=false

5
Wenn Sie Opfer eines schändlichen Man-in-the-Middle-Angriffs sind, besteht das Risiko, dass das Paket beim Herunterladen geändert wird.
Alex KeySmith

@AlexKeySmith Du hast recht. Die Chancen stehen jedoch ziemlich niedrig. Dies könnte für einige die einzige Option sein. Vorbehalt Emptor
Jason Geiger

1

Ich hatte diesen Fehler, als ich versuchte, npm zu aktualisieren, aber eine wirklich alte Version (1.3.6!) Von yum in AWS Linux installiert hatte. Ich konnte eine neuere npm-Version manuell installieren und alles wurde behoben.


0

Der folgende Code hat bei mir perfekt funktioniert. Machen Sie hier nur http statt https

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

0

In meinem Fall habe ich irgendwann meine globale Konfiguration so eingestellt, dass ein Zertifikat verwendet wird, das für ein Projekt bestimmt ist.

npm config list

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

Ich öffnete die Datei, entfernte die Zeile und npm installarbeitete erneut.


0

habe den folgenden Fehler erhalten

PS C: \ Benutzer \ chpr \ Dokumente \ GitHub \ vue-nwjs-Stunden-Tracking> npm install vue npm ERR! Code UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! Anforderung an https://registry.npmjs.org/vue fehlgeschlagen, Grund: Lokales Ausstellerzertifikat kann nicht abgerufen werden

npm ERR! Ein vollständiges Protokoll dieses Laufs finden Sie in: npm ERR!
C: \ Benutzer \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log PS C: \ Benutzer \ chpr \ Dokumente \ GitHub \ vue-nwjs-Stunden-Tracking> PS C: \ Benutzer \ chpr \ Documents \ GitHub \ vue-nwjs-Stunden-Tracking> npm ERR!
C: \ Benutzer \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

Der folgende Befehl hat das Problem behoben:

npm config set strict-ssl false
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.