Aller au contenu
ecdsa.com
npm (Node.js)Gestionnaires de paquets

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

Comment corriger l’erreur

  1. 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. 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. 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. 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. 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

Parcourir toute la base de données des erreurs de signature