Mensagem de erro
Error: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR
Também aparece como
- Error: ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST
O código principal depende do comando: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR para pnpm install, ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST para pnpm add. A cadeia de causas logo abaixo diz “Failed to fetch metadata from <url>: error sending request: client error (Connect): invalid peer certificate: UnknownIssuer” e quebra a linha em 80 colunas. O pnpm 10 e anteriores rodam sobre o Node.js e, em vez disso, relatam códigos do Node.js como SELF_SIGNED_CERT_IN_CHAIN ou UNABLE_TO_GET_ISSUER_CERT_LOCALLY.
pnpm 12 (native binary, rustls) — registry request over HTTPS fails with "invalid peer certificate: UnknownIssuer"
O que significa
O pnpm 12 não conseguiu buscar os metadados dos pacotes no registro, e a cadeia de causas que ele imprime termina em “invalid peer certificate: UnknownIssuer”: uma falha de verificação de TLS. O pnpm 12 é um binário nativo cujo cliente HTTP verifica certificados com o rustls, e “UnknownIssuer” é o código único do rustls para qualquer falha na montagem da cadeia: CA privada desconhecida, raiz de proxy, intermediário ausente ou certificado autoassinado.
Por que acontece
Conferir primeiro a última linha: o código também cobre erros de rede comuns
comumERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR também é usado para falhas de DNS, de conexão e de proxy. Só quando a cadeia de causas termina em “invalid peer certificate” o problema é de certificado.
Um registro privado com um certificado da empresa
comumRegistros internos com certificados assinados por uma CA da empresa que não está entre as CAs em que o pnpm confia.
Um proxy com inspeção de TLS
comumEm redes corporativas, o registry.npmjs.org é reassinado pela raiz do proxy.
Registro com certificado autoassinado ou só com o certificado folha
ocasionalO rustls não distingue esses casos: um certificado autoassinado e um intermediário ausente também acabam como UnknownIssuer.
Como corrigir
- 1.
Definir cafile no .npmrc
O pnpm lê arquivos de configuração no estilo do npm; cafile (ou um valor ca informado diretamente) adiciona a CA para as requisições ao registro.
ini ; .npmrc (project or ~/.npmrc) — read by pnpm as well as npm cafile=/etc/ssl/private-ca/corp-root-ca.pem - 2.
Instalar a raiz no repositório do sistema operacional
No nosso teste, o pnpm 12 aceitou uma raiz adicionada com update-ca-certificates; portanto, raízes distribuídas pela TI funcionam sem configuração adicional.
bash # pnpm 12 also trusts the operating system's store sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt sudo update-ca-certificates - 3.
Ou usar NODE_EXTRA_CA_CERTS
O pnpm 12 também respeita essa variável, o que permite manter uma única configuração para Node.js, npm e pnpm.
bash # Honoured by pnpm 12 too, so one variable covers node, npm and pnpm export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem pnpm install