Pular para o conteúdo
ecdsa.com
npm (Node.js)Gerenciadores de pacotes

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

Como corrigir

  1. 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. 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. 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

Erros relacionados

Ver toda a base de erros de assinatura