Mensagem de erro
npm error code CERT_HAS_EXPIRED
Também aparece como
- npm ERR! code CERT_HAS_EXPIRED
- npm error request to https://registry.example.com/lodash failed, reason: certificate has expired
O npm 10 e posteriores imprimem “npm error code CERT_HAS_EXPIRED”; o npm 9 e anteriores, “npm ERR! code CERT_HAS_EXPIRED”. As linhas seguintes trazem a URL com “reason: certificate has expired”.
npm (Node.js) — registry request over HTTPS
O que significa
Um certificado da cadeia que o npm recebeu do registro (ou de um proxy no meio do caminho) já passou da data de expiração, segundo o relógio desta máquina. No registro público, isso quase nunca significa que o próprio certificado do npm expirou: indica uma CA antiga fixada na configuração do npm, uma lista de raízes do Node.js desatualizada, um certificado de proxy ou um relógio errado. Em registros privados, o certificado do servidor pode ter expirado de fato.
Por que acontece
O certificado do registro privado expirou
comumInstâncias auto-hospedadas de Nexus, Artifactory ou Verdaccio e proxies corporativos cujos certificados são renovados manualmente.
Um Node.js muito antigo, com raízes desatualizadas
ocasionalO Node.js traz a lista de raízes no binário; versões anteriores à troca de raiz de uma CA podem conhecer só a raiz expirada e falhar onde as versões atuais funcionam.
Uma CA antiga fixada pela configuração ca ou cafile
ocasionalUma entrada ca= ou cafile= deixada no .npmrc anos atrás substitui as raízes padrão do Node.js nas requisições ao registro, então o npm continua validando com aquele certificado antigo, agora expirado.
O relógio do sistema está errado
ocasionalVerifique a data em VMs, contêineres e dispositivos sem relógio alimentado por bateria antes de mudar a configuração.
Como corrigir
- 1.
Verificar qual registro e qual certificado estão envolvidos
Veja qual registro está configurado e a data de término da validade do certificado que ele serve. Um certificado expirado em um registro privado precisa ser renovado no servidor.
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.
Remover configurações ca ou cafile obsoletas
O comando npm config list mostra as configurações de todos os níveis de .npmrc; exclua as entradas ca ou cafile que apontam para certificados antigos (ou atualize o arquivo a que elas se referem).
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.
Atualizar o Node.js e o npm
Uma versão do Node.js com suporte traz uma lista de raízes atual; depois, atualize o npm.
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