Message d’erreur
npm error code UNABLE_TO_GET_ISSUER_CERT_LOCALLY
Également affiché sous la forme
- npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY
- npm error request to https://registry.example.com/lodash failed, reason: unable to get local issuer certificate
npm 10 et les versions ultérieures préfixent les lignes par « npm error » ; npm 9 et les versions antérieures utilisaient « npm ERR! ». Les lignes suivantes répètent le code comme errno et donnent l’URL avec « reason: unable to get local issuer certificate ».
npm (Node.js) — registry request over HTTPS
Ce que cela signifie
npm n’a pas pu vérifier le certificat TLS du registre : la chaîne reçue mène à une racine qui ne figure pas parmi les AC approuvées par Node.js. npm s’exécute sur Node.js, qui par défaut ne fait confiance qu’à sa liste intégrée de racines Mozilla : une racine d’entreprise ou de proxy installée dans le système d’exploitation n’est donc pas utilisée. La requête échoue avant le téléchargement du moindre paquet.
Pourquoi cela se produit
Un proxy d’inspection TLS re-signe registry.npmjs.org
fréquenteSur les réseaux d’entreprise, le proxy présente des certificats émis par sa propre AC. Les navigateurs font confiance à cette AC via le système d’exploitation ; npm, qui passe par Node.js, ne lui fait pas confiance.
Un registre privé avec un certificat d’entreprise
fréquenteArtifactory, Nexus, Verdaccio ou les registres de paquets de GitHub Enterprise utilisent souvent un certificat émis par une AC interne absente de la liste de racines de Node.js.
La racine est dans le magasin du système d’exploitation, mais Node.js utilise sa propre liste
occasionnelleupdate-ca-certificates, le trousseau macOS et le magasin Windows n’ont aucun effet sur Node.js, sauf si on lui demande d’utiliser le magasin du système.
Comment corriger l’erreur
- 1.
Définir le cafile de npm
npm config set cafile indique à npm un fichier PEM contenant les certificats d’AC à approuver pour les requêtes vers le registre (enregistré dans votre .npmrc utilisateur ; --location=project ou --location=global pour les autres portées). npm ne fait alors confiance qu’aux AC de ce fichier : incluez donc aussi les racines publiques si npm accède également à des registres dont le certificat ne provient pas de votre AC.
bash # npm's own setting: a PEM file with the CA(s) to trust for registry requests npm config set cafile /etc/ssl/private-ca/corp-root-ca.pem npm config get cafile - 2.
Utiliser NODE_EXTRA_CA_CERTS
Les certificats de ce fichier s’ajoutent aux racines intégrées de Node.js pour chaque processus Node.js lancé avec la variable, y compris npm, npx et les outils de build.
bash # Adds to Node.js's built-in roots for npm and every other Node.js tool in this shell export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem npm install - 3.
Utiliser le magasin de confiance du système d’exploitation
Avec NODE_USE_SYSTEM_CA=1 (versions de Node.js qui prennent en charge --use-system-ca), npm fait confiance aux racines que le service informatique a déployées dans le système d’exploitation.
bash # Trust what the OS trusts (corporate roots deployed by IT) NODE_USE_SYSTEM_CA=1 npm install - 4.
CI : fournir l’AC via l’environnement
Versionnez la racine de l’entreprise dans le dépôt (elle est publique) ou récupérez-la dans le job, puis définissez NODE_EXTRA_CA_CERTS pour les étapes qui exécutent npm.
yaml # CI job (GitHub Actions syntax): provide the CA to npm without touching the image env: NODE_EXTRA_CA_CERTS: ${{ github.workspace }}/certs/corp-root-ca.pem steps: - run: npm ci - 5.
Diagnostic temporaire : --strict-ssl=false pour une seule commande
Désactive la vérification des certificats pour les requêtes vers le registre. Cela confirme le diagnostic, mais permet à quiconque se trouve sur le chemin de substituer des paquets, qui exécutent ensuite des scripts d’installation sur votre machine ; ne conservez jamais ce réglage dans .npmrc.
bash # Temporary diagnostic for one command only, never in .npmrc npm install --strict-ssl=false
Erreurs associées
unable to get local issuer certificateNode.js tls / https / fetchnpm error code SELF_SIGNED_CERT_IN_CHAINnpm (Node.js)error Error: unable to get local issuer certificateYarn Classic (1.x); Yarn 4 prints the aliasError: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERRORpnpm 12 (native binary, rustls)There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FA…pip