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

Mensagem de erro

npm error code SELF_SIGNED_CERT_IN_CHAIN

Também aparece como

  • npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
  • npm error request to https://registry.example.com/lodash failed, reason: self-signed certificate in certificate chain

O npm 10 e posteriores imprimem “npm error code SELF_SIGNED_CERT_IN_CHAIN”; o npm 9 e anteriores, “npm ERR! code SELF_SIGNED_CERT_IN_CHAIN”. As linhas seguintes repetem o código como errno e citam a URL com “reason: self-signed certificate in certificate chain”.

npm (Node.js) — registry request over HTTPS

O que significa

A conexão com o registro apresentou uma cadeia de certificados que termina em uma raiz autoassinada que o Node.js não conhece. No caso do registry.npmjs.org, isso significa que o tráfego está sendo interceptado e reassinado, quase sempre por um proxy da empresa ou por um antivírus com inspeção de HTTPS, em cuja raiz o navegador confia, mas o npm não.

Por que acontece

Como corrigir

  1. 1.

    Passar a raiz do proxy ao npm com cafile

    Exporte o certificado raiz (obtido com a equipe de TI ou a partir do trust store do sistema operacional) como PEM e defina-o como o cafile do npm. A partir daí, o npm confia só nas CAs desse arquivo; por isso, em notebooks que também são usados fora da rede da empresa, adicione as raízes públicas ao mesmo arquivo ou prefira NODE_EXTRA_CA_CERTS.

    bash
    npm config set cafile /etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  2. 2.

    Ou definir NODE_EXTRA_CA_CERTS

    Adiciona a raiz para o npm e para todas as outras ferramentas Node.js sem substituir as raízes públicas do Node.js. No Windows, defina-a como variável de ambiente do usuário e abra um novo terminal.

    bash
    # Windows (PowerShell): setx NODE_EXTRA_CA_CERTS C:\certs\corp-proxy-root.pem
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  3. 3.

    Ou deixar o Node.js usar o repositório do sistema operacional

    Com NODE_USE_SYSTEM_CA=1, o Node.js (e o npm) passa a confiar no que o sistema operacional considera confiável, e em máquinas gerenciadas isso inclui a raiz do proxy.

    bash
    # Managed machines already trust the proxy root in the OS store
    NODE_USE_SYSTEM_CA=1 npm install
  4. 4.

    Diagnóstico temporário: --strict-ssl=false

    Só para confirmar que o problema é de confiança. Pacotes executam scripts de instalação, então aceitar downloads não verificados é o caminho pelo qual ataques à cadeia de suprimentos chegam às máquinas dos desenvolvedores; nunca coloque strict-ssl=false no .npmrc.

    bash
    # Temporary diagnostic for one command only
    npm install --strict-ssl=false

Erros relacionados

Ver toda a base de erros de assinatura