Mensagem de erro
npm error code DEPTH_ZERO_SELF_SIGNED_CERT
Também aparece como
- npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT
O npm 10 e posteriores imprimem “npm error code DEPTH_ZERO_SELF_SIGNED_CERT”; o npm 9 e anteriores, “npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT”. A linha do motivo diz “self-signed certificate”, com a dica sobre --use-system-ca nas versões recentes do Node.js.
npm (Node.js) — registry request over HTTPS
O que significa
O registro ao qual o npm se conectou apresentou um único certificado autoassinado em que o Node.js não confia. Não há cadeia de CA nenhuma, então os únicos caminhos são confiar deliberadamente nesse certificado exato ou dar ao registro um certificado emitido por uma CA. É típico de registros locais ou auto-hospedados iniciados com um certificado gerado.
Por que acontece
Um registro local ou auto-hospedado com um certificado gerado
comumVerdaccio, uma versão de avaliação do Nexus ou do Artifactory, ou um contêiner de registro iniciado com um certificado autoassinado.
Um appliance ou proxy com o certificado de fábrica
ocasionalAlguns proxies de cache e appliances de rede apresentam um certificado autoassinado até que um certificado adequado seja instalado.
Um ingress do Kubernetes que responde com o certificado padrão
ocasionalQuando o host do registro não está configurado no ingress, ele serve um certificado padrão autoassinado (no ingress-nginx, “Kubernetes Ingress Controller Fake Certificate”).
Como corrigir
- 1.
Confiar exatamente neste certificado
Obtenha o certificado, compare a impressão digital SHA-256 dele com a que aparece no host do registro e depois adicione-o com NODE_EXTRA_CA_CERTS (ou com o cafile do 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.
Restringir o registro privado ao seu escopo
Direcionar só o escopo da sua organização para o registro privado mantém todos os pacotes públicos no registry.npmjs.org, então um problema de certificado no host privado não pode afetá-los.
ini ; .npmrc — only @acme packages come from the private registry; the rest from npmjs @acme:registry=https://registry.example.com/ - 3.
Dar ao registro um certificado emitido por uma CA
Um certificado de uma CA pública (ACME) ou da CA da empresa em que suas máquinas já confiam elimina a necessidade de exceções 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