Message d’erreur
npm error code CERT_HAS_EXPIRED
Également affiché sous la forme
- npm ERR! code CERT_HAS_EXPIRED
- npm error request to https://registry.example.com/lodash failed, reason: certificate has expired
npm 10 et les versions ultérieures affichent « npm error code CERT_HAS_EXPIRED » ; npm 9 et les versions antérieures, « npm ERR! code CERT_HAS_EXPIRED ». Les lignes suivantes donnent l’URL avec « reason: certificate has expired ».
npm (Node.js) — registry request over HTTPS
Ce que cela signifie
Un certificat de la chaîne que npm a reçue du registre (ou d’un proxy intermédiaire) a dépassé sa date d’expiration selon l’horloge de cette machine. Pour le registre public, cela ne signifie presque jamais que le certificat de npm lui-même a expiré : cela indique une ancienne AC épinglée dans votre configuration npm, une liste de racines Node.js obsolète, un certificat de proxy ou une horloge fausse. Pour les registres privés, il se peut que le certificat du serveur ait réellement expiré.
Pourquoi cela se produit
Le certificat du registre privé a expiré
fréquenteDes instances Nexus, Artifactory ou Verdaccio auto-hébergées et des proxys d’entreprise dont les certificats sont renouvelés à la main.
Une très ancienne version de Node.js avec des racines obsolètes
occasionnelleNode.js embarque sa liste de racines dans le binaire ; les versions antérieures au changement de racine d’une AC peuvent ne connaître que la racine expirée et échouer là où les versions actuelles réussissent.
Une ancienne AC épinglée avec le paramètre ca ou cafile
occasionnelleUne entrée ca= ou cafile= laissée dans .npmrc il y a des années remplace les racines par défaut de Node.js pour les requêtes vers le registre : npm continue donc de valider par rapport à cet ancien certificat, aujourd’hui expiré.
L’horloge du système est fausse
occasionnelleVérifiez la date sur les VM, les conteneurs et les appareils sans horloge sauvegardée par pile avant de modifier la configuration.
Comment corriger l’erreur
- 1.
Déterminer quel registre et quel certificat sont en cause
Relevez le registre configuré et la date de fin de validité du certificat qu’il sert. Un certificat expiré sur un registre privé doit être renouvelé sur le serveur.
bash npm config get registry echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \ | openssl x509 -noout -subject -enddate - 2.
Supprimer les paramètres ca ou cafile obsolètes
npm config list affiche les paramètres de chaque niveau de .npmrc ; supprimez les entrées ca ou cafile qui pointent vers d’anciens certificats (ou mettez à jour le fichier qu’elles référencent).
bash # An old CA pinned in .npmrc replaces the default roots: list and remove it npm config list | grep -E '^;? *(ca|cafile)' npm config delete ca npm config delete cafile - 3.
Mettre à jour Node.js et npm
Une version maintenue de Node.js apporte une liste de racines à jour ; mettez ensuite npm à jour.
bash node -v && npm -v # Node.js bundles its root list; very old releases carry expired roots # upgrade Node.js to a maintained release (nvm, fnm, volta or your OS packages), then: npm install -g npm@latest