Mensaje de error
npm error code DEPTH_ZERO_SELF_SIGNED_CERT
También se muestra como
- npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT
npm 10 y posteriores imprimen «npm error code DEPTH_ZERO_SELF_SIGNED_CERT»; npm 9 y anteriores, «npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT». La línea del motivo dice «self-signed certificate», con la sugerencia de --use-system-ca en las versiones recientes de Node.js.
npm (Node.js) — registry request over HTTPS
Qué significa
El registro al que se conectó npm presentó un único certificado autofirmado en el que Node.js no confía. No hay ninguna cadena de CA, así que las únicas salidas son confiar deliberadamente en ese certificado concreto o dar al registro un certificado emitido por una CA. Es típico de los registros locales o autoalojados que se iniciaron con un certificado generado.
Por qué ocurre
Un registro local o autoalojado con un certificado generado
frecuenteVerdaccio, una versión de prueba de Nexus o Artifactory, o un contenedor de registro iniciado con un certificado autofirmado.
Un dispositivo dedicado o un proxy con su certificado de fábrica
ocasionalAlgunos proxies de caché y dispositivos de red presentan un certificado autofirmado hasta que se instala uno adecuado.
Un ingress de Kubernetes que responde con su certificado predeterminado
ocasionalCuando el host del registro no está configurado en el ingress, este sirve un certificado predeterminado autofirmado (en ingress-nginx, «Kubernetes Ingress Controller Fake Certificate»).
Cómo solucionarlo
- 1.
Confiar exactamente en este certificado
Obtén el certificado, compara su huella digital SHA-256 con la que se muestra en el host del registro y después añádelo con NODE_EXTRA_CA_CERTS (o con el 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.
Limitar el registro privado a tu ámbito
Si solo diriges el ámbito (scope) de tu organización al registro privado, todos los paquetes públicos siguen viniendo de registry.npmjs.org, así que un problema de certificado en el host privado no puede afectarlos.
ini ; .npmrc — only @acme packages come from the private registry; the rest from npmjs @acme:registry=https://registry.example.com/ - 3.
Dar al registro un certificado emitido por una CA
Un certificado de una CA pública (ACME) o de la CA de la empresa en la que ya confían tus equipos elimina la necesidad de excepciones certificado por certificado.
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