Message d’erreur
npm error code SELF_SIGNED_CERT_IN_CHAIN
Également affiché sous la forme
- 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 et les versions ultérieures affichent « npm error code SELF_SIGNED_CERT_IN_CHAIN », npm 9 et les versions antérieures « npm ERR! code SELF_SIGNED_CERT_IN_CHAIN ». Les lignes suivantes répètent le code comme errno et indiquent l’URL avec « reason: self-signed certificate in certificate chain ».
npm (Node.js) — registry request over HTTPS
Ce que cela signifie
La connexion au registre a présenté une chaîne de certificats qui se termine par une racine auto-signée inconnue de Node.js. Pour registry.npmjs.org, cela signifie que le trafic est intercepté et re-signé, presque toujours par un proxy d’entreprise ou un antivirus avec analyse HTTPS, dont le navigateur approuve la racine, mais pas npm.
Pourquoi cela se produit
Un proxy d’inspection TLS d’entreprise
fréquenteZscaler, Netskope, Palo Alto, Fortinet et les produits similaires s’intercalent entre votre machine et le registre, et présentent leur propre racine dans la chaîne.
Antivirus ou solution de sécurité des endpoints avec analyse HTTPS
occasionnelleCertaines solutions de sécurité des endpoints interceptent TLS localement sur la machine et n’injectent leur racine que dans le magasin du système d’exploitation.
Un registre privé qui envoie sa propre racine
occasionnelleLes registres internes dont le certificat est signé par une AC d’entreprise et qui envoient la racine dans leur chaîne exigent malgré tout que Node.js approuve cette racine.
Comment corriger l’erreur
- 1.
Fournir à npm la racine du proxy avec cafile
Exportez le certificat racine (fourni par votre équipe informatique ou tiré du magasin de confiance du système d’exploitation) au format PEM et définissez-le comme cafile de npm. npm ne fait alors confiance qu’aux AC de ce fichier : sur les ordinateurs portables qui fonctionnent aussi hors du réseau de l’entreprise, ajoutez donc les racines publiques au même fichier ou préférez NODE_EXTRA_CA_CERTS.
bash npm config set cafile /etc/ssl/private-ca/corp-proxy-root.pem npm install - 2.
Ou définir NODE_EXTRA_CA_CERTS
Ajoute la racine pour npm et tous les autres outils Node.js sans remplacer les racines publiques de Node.js. Sous Windows, définissez NODE_EXTRA_CA_CERTS comme variable d’environnement utilisateur, puis ouvrez un nouveau 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.
Ou laisser Node.js utiliser le magasin du système d’exploitation
NODE_USE_SYSTEM_CA=1 amène Node.js (et npm) à faire confiance à ce que le système d’exploitation approuve, ce qui, sur les machines gérées, inclut la racine du proxy.
bash # Managed machines already trust the proxy root in the OS store NODE_USE_SYSTEM_CA=1 npm install - 4.
Diagnostic temporaire : --strict-ssl=false
Uniquement pour confirmer que le problème vient de la confiance. Les paquets exécutent des scripts d’installation : accepter des téléchargements non vérifiés, c’est précisément ainsi que les attaques de la chaîne d’approvisionnement atteignent les machines des développeurs. Ne mettez jamais strict-ssl=false dans .npmrc.
bash # Temporary diagnostic for one command only npm install --strict-ssl=false
Erreurs associées
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)