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

Message d’erreur

npm error code UNABLE_TO_VERIFY_LEAF_SIGNATURE

Également affiché sous la forme

  • npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE
  • npm error request to https://registry.example.com/lodash failed, reason: unable to verify the first certificate

npm 10 et les versions ultérieures affichent « npm error code UNABLE_TO_VERIFY_LEAF_SIGNATURE », npm 9 et les versions antérieures « npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE ». Les versions récentes de Node.js ajoutent « ; if the root CA is installed locally, try running Node.js with --use-system-ca » à la ligne de raison.

npm (Node.js) — registry request over HTTPS

Ce que cela signifie

Le registre (ou un proxy placé devant lui) n’a envoyé que son propre certificat, et Node.js n’a pas trouvé le certificat qui l’a émis. Sans l’émetteur, la signature du certificat feuille ne peut tout simplement pas être vérifiée. Il s’agit d’un problème de configuration du serveur : le certificat intermédiaire manque dans le handshake, et Node.js ne compense pas ce manque en le téléchargeant.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Compter les certificats dans le handshake

    Seule la présence d’un unique certificat (profondeur 0) dont l’émetteur est une AC intermédiaire confirme que le certificat intermédiaire manque.

    bash
    openssl s_client -connect registry.example.com:443 -servername registry.example.com -showcerts </dev/null 2>/dev/null \
      | grep -E '^ *[0-9]+ s:|^ *i:'
  2. 2.

    Servir la chaîne complète sur le registre

    Configurez le composant qui assure la terminaison TLS devant le registre avec le certificat feuille et les certificats intermédiaires. Cela corrige d’un coup npm, yarn, pnpm, Docker et tous les autres clients.

    text
    # Registry behind nginx: serve leaf + intermediate(s)
    ssl_certificate     /etc/nginx/tls/registry.example.com.fullchain.pem;
    ssl_certificate_key /etc/nginx/tls/registry.example.com.key;
  3. 3.

    Contournement : faire confiance au certificat intermédiaire sur le client

    Un cafile contenant le certificat intermédiaire et sa racine permet à npm de vérifier le certificat feuille en attendant la correction du serveur ; cafile remplace les racines par défaut de npm : ajoutez donc aussi les racines publiques si ce même npm utilise également registry.npmjs.org.

    bash
    # Until the registry is fixed: trust the intermediate (plus its root) on the client
    cat issuing-ca.pem corp-root-ca.pem > /etc/ssl/private-ca/registry-ca.pem
    npm config set cafile /etc/ssl/private-ca/registry-ca.pem

Erreurs associées

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