Message d’erreur
npm error code ERR_TLS_CERT_ALTNAME_INVALID
Également affiché sous la forme
- npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID
- npm error request to https://registry.example.com/lodash failed, reason: Hostname/IP does not match certificate's altnames: Host: registry.example.com. is not in the cert's altnames: DNS:www.example.com
npm 10 et les versions ultérieures affichent « npm error code ERR_TLS_CERT_ALTNAME_INVALID », npm 9 et les versions antérieures « npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID ». L’hôte et les altnames de la ligne de raison proviennent de votre configuration et du certificat du serveur.
npm (Node.js) — registry request over HTTPS
Ce que cela signifie
Le certificat du registre est approuvé, mais il n’a pas été émis pour le nom d’hôte figurant dans l’URL du registre utilisée par npm. La ligne de raison détaille les deux côtés : l’hôte demandé par npm et les noms que contient le certificat. C’est typique après le passage d’un registre à un nouveau nom, ou lorsque l’URL du registre utilise un alias, une adresse IP ou le mauvais environnement.
Pourquoi cela se produit
L’URL du registre utilise un nom que le certificat ne couvre pas
fréquenteUn alias, une adresse IP, un ancien nom d’hôte conservé dans .npmrc ou dans les URL résolues de package-lock.json, ou un hôte de préproduction réutilisé en production.
Un proxy répond avec un certificat pour un autre nom
occasionnelleLes proxys sortants mal configurés et les portails captifs présentent leur propre certificat, qui ne mentionne pas le registre.
Il manque un nom au certificat du registre
occasionnelleUn certificat réémis sans l’un des noms qu’utilisent les clients, par exemple l’ancien nom d’hôte conservé comme alias.
Comment corriger l’erreur
- 1.
Comparer le paramètre de registre de npm avec le certificat
Affichez le registre configuré (et les paramètres de proxy) ainsi que la liste SAN du certificat. Les fichiers de verrouillage contiennent aussi des URL résolues ; elles doivent utiliser le même hôte.
bash npm config get registry npm config list | grep -iE 'registry|proxy' echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \ | openssl x509 -noout -ext subjectAltName - 2.
Faire pointer npm vers le nom du certificat
Mettez à jour le paramètre de registre à chaque niveau de .npmrc (et régénérez les fichiers de verrouillage s’ils contiennent l’ancien hôte).
bash # Use the host name the registry's certificate was issued for npm config set registry https://npm.example.com/ - 3.
Propriétaires de registres : couvrir chaque nom utilisé
Réémettez le certificat du registre avec tous les noms d’hôte qu’utilisent les clients, y compris les alias conservés pour la compatibilité.
bash # Registry owners: include every name clients use sudo certbot certonly --nginx -d npm.example.com -d registry.example.com