Message d’erreur
npm error code DEPTH_ZERO_SELF_SIGNED_CERT
Également affiché sous la forme
- npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT
npm 10 et les versions ultérieures affichent « npm error code DEPTH_ZERO_SELF_SIGNED_CERT », npm 9 et les versions antérieures « npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT ». La ligne de raison indique « self-signed certificate », avec la suggestion --use-system-ca sur les versions récentes de Node.js.
npm (Node.js) — registry request over HTTPS
Ce que cela signifie
Le registre auquel npm s’est connecté a présenté un unique certificat auto-signé auquel Node.js ne fait pas confiance. Il n’y a aucune chaîne d’AC : les seules solutions sont donc de faire délibérément confiance à ce certificat précis ou de doter le registre d’un certificat émis par une AC. C’est typique des registres locaux ou auto-hébergés démarrés avec un certificat généré.
Pourquoi cela se produit
Un registre local ou auto-hébergé avec un certificat généré
fréquenteVerdaccio, une version d’essai de Nexus ou d’Artifactory, ou un conteneur de registre démarré avec un certificat auto-signé.
Un équipement ou un proxy avec son certificat d’usine
occasionnelleCertains proxys de cache et équipements réseau présentent un certificat auto-signé jusqu’à ce qu’un vrai certificat soit installé.
Un ingress Kubernetes qui répond avec son certificat par défaut
occasionnelleLorsque l’hôte du registre n’est pas configuré sur l’ingress, celui-ci sert un certificat par défaut auto-signé (pour ingress-nginx : « Kubernetes Ingress Controller Fake Certificate »).
Comment corriger l’erreur
- 1.
Faire confiance exactement à ce certificat
Récupérez le certificat, comparez son empreinte SHA-256 avec celle affichée sur l’hôte du registre, puis ajoutez-le avec NODE_EXTRA_CA_CERTS (ou le paramètre cafile de npm).
bash # Save the registry's certificate, check its fingerprint, and trust exactly this file openssl s_client -connect registry.example.com:443 -servername registry.example.com </dev/null 2>/dev/null \ | openssl x509 -out registry.pem openssl x509 -in registry.pem -noout -fingerprint -sha256 NODE_EXTRA_CA_CERTS=$PWD/registry.pem npm install - 2.
Limiter le registre privé à votre scope
N’acheminer que le scope de votre organisation vers le registre privé laisse tous les paquets publics sur registry.npmjs.org : un problème de certificat sur l’hôte privé ne peut donc pas les affecter.
ini ; .npmrc — only @acme packages come from the private registry; the rest from npmjs @acme:registry=https://registry.example.com/ - 3.
Doter le registre d’un certificat émis par une AC
Un certificat émis par une AC publique (ACME) ou par l’AC d’entreprise que vos machines approuvent déjà rend inutiles les exceptions certificat par certificat.
bash # Give the registry a certificate from a CA your machines trust (public ACME or company CA) sudo certbot certonly --standalone -d registry.example.com