Mensagem de erro
npm error code ERR_TLS_CERT_ALTNAME_INVALID
Também aparece como
- npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID
- npm error request to https://registry.example.com/lodash failed, reason: Hostname/IP does not match certificate's altnames: Host: registry.example.com. is not in the cert's altnames: DNS:www.example.com
O npm 10 e posteriores imprimem “npm error code ERR_TLS_CERT_ALTNAME_INVALID”; o npm 9 e anteriores, “npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID”. O host e os altnames na linha do motivo vêm da sua configuração e do certificado do servidor.
npm (Node.js) — registry request over HTTPS
O que significa
O certificado do registro é confiável, mas não foi emitido para o nome de host da URL de registro que o npm usou. A linha do motivo mostra os dois lados: o host que o npm pediu e os nomes que o certificado contém. É típico depois que um registro muda de nome, ou quando a URL do registro usa um alias, um endereço IP ou o ambiente errado.
Por que acontece
A URL do registro usa um nome que o certificado não cobre
comumUm alias, um endereço IP, um nome de host antigo mantido no .npmrc ou nas URLs resolvidas do package-lock.json, ou um host de homologação reutilizado em produção.
Um proxy responde com um certificado para outro nome
ocasionalProxies de encaminhamento mal configurados e portais cativos apresentam o próprio certificado, que não contém o nome do registro.
Falta um nome no certificado do registro
ocasionalUm certificado reemitido sem um dos nomes que os clientes usam, por exemplo o nome de host antigo mantido como alias.
Como corrigir
- 1.
Comparar a configuração de registro do npm com o certificado
Imprima o registro configurado (e as configurações de proxy) e a lista de SANs do certificado. Os lockfiles também contêm URLs resolvidas, que precisam usar o mesmo host.
bash npm config get registry npm config list | grep -iE 'registry|proxy' echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \ | openssl x509 -noout -ext subjectAltName - 2.
Apontar o npm para o nome do certificado
Atualize a configuração registry em todos os níveis de .npmrc (e gere os lockfiles de novo se eles contiverem o host antigo).
bash # Use the host name the registry's certificate was issued for npm config set registry https://npm.example.com/ - 3.
Donos do registro: cobrir todos os nomes em uso
Reemita o certificado do registro com todos os nomes de host que os clientes usam, inclusive os aliases mantidos por compatibilidade.
bash # Registry owners: include every name clients use sudo certbot certonly --nginx -d npm.example.com -d registry.example.com