Fehlermeldung
npm error code SELF_SIGNED_CERT_IN_CHAIN
Auch ausgegeben als
- npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
- npm error request to https://registry.example.com/lodash failed, reason: self-signed certificate in certificate chain
npm 10 und neuer geben „npm error code SELF_SIGNED_CERT_IN_CHAIN“ aus, npm 9 und älter „npm ERR! code SELF_SIGNED_CERT_IN_CHAIN“. Die nächsten Zeilen wiederholen den Code als errno und nennen die URL mit „reason: self-signed certificate in certificate chain“.
npm (Node.js) — registry request over HTTPS
Was der Fehler bedeutet
Über die Verbindung zur Registry kam eine Zertifikatskette, die bei einem selbstsignierten Root-Zertifikat endet, das Node.js nicht kennt. Bei registry.npmjs.org bedeutet das, dass der Traffic abgefangen und neu signiert wird, fast immer von einem Firmenproxy oder einem Antivirenprodukt mit HTTPS-Scan, dessen Root-Zertifikat der Browser vertraut, npm aber nicht.
Warum der Fehler auftritt
Ein Firmenproxy mit TLS-Inspektion
häufigZscaler, Netskope, Palo Alto, Fortinet und ähnliche Produkte sitzen zwischen deinem Rechner und der Registry und präsentieren ihr eigenes Root-Zertifikat in der Kette.
Antivirensoftware oder Endpoint-Schutz mit HTTPS-Scan
gelegentlichManche Endpoint-Produkte fangen TLS lokal auf dem Rechner ab und tragen ihr Root-Zertifikat nur in den Trust Store des Betriebssystems ein.
Eine private Registry, die ihr eigenes Root-Zertifikat sendet
gelegentlichAuch wenn interne Registrys, deren Zertifikat von einer Firmen-CA signiert ist, das Root-Zertifikat in ihrer Kette mitsenden, muss Node.js diesem Root-Zertifikat vertrauen.
So behebst du den Fehler
- 1.
npm das Root-Zertifikat des Proxys per cafile geben
Hol dir das Root-Zertifikat vom IT-Team oder exportiere es aus dem Trust Store des Betriebssystems, speichere es als PEM und setze es als cafile von npm. npm vertraut dann nur den CAs in dieser Datei; auf Laptops, die auch außerhalb des Firmennetzes arbeiten, nimm deshalb die öffentlichen Root-Zertifikate in dieselbe Datei auf oder verwende besser NODE_EXTRA_CA_CERTS.
bash npm config set cafile /etc/ssl/private-ca/corp-proxy-root.pem npm install - 2.
Oder NODE_EXTRA_CA_CERTS setzen
Fügt das Root-Zertifikat für npm und jedes andere Node.js-Tool hinzu, ohne die öffentlichen Root-Zertifikate von Node.js zu ersetzen. Unter Windows setze die Variable als Umgebungsvariable des Benutzers und öffne danach ein neues Terminal.
bash # Windows (PowerShell): setx NODE_EXTRA_CA_CERTS C:\certs\corp-proxy-root.pem export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem npm install - 3.
Oder Node.js den Trust Store des Betriebssystems verwenden lassen
NODE_USE_SYSTEM_CA=1 lässt Node.js (und npm) dem vertrauen, was das Betriebssystem als vertrauenswürdig einstuft; auf verwalteten Rechnern gehört dazu auch das Root-Zertifikat des Proxys.
bash # Managed machines already trust the proxy root in the OS store NODE_USE_SYSTEM_CA=1 npm install - 4.
Vorübergehende Diagnose: --strict-ssl=false
Nur um zu bestätigen, dass das Vertrauen das Problem ist. Pakete führen Installationsskripte aus; ungeprüfte Downloads zu akzeptieren ist genau der Weg, auf dem Supply-Chain-Angriffe auf Entwicklungsrechner gelangen. Trage strict-ssl=false niemals in die .npmrc ein.
bash # Temporary diagnostic for one command only npm install --strict-ssl=false
Verwandte Fehler
self-signed certificate in certificate chainNode.js tls / https / fetchnpm error code UNABLE_TO_GET_ISSUER_CERT_LOCALLYnpm (Node.js)error Error: self-signed certificate in certificate chainYarn Classic (1.x)Error: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERRORpnpm 12 (native binary, rustls)fatal: unable to access 'https://git.example.com/team/app.git/': SSL certificat…git over HTTPS with libcurl + OpenSSL (Git for Windows default, macOS Homebrew, Alpine, RHEL)