Mensagem de erro
net::ERR_CERT_AUTHORITY_INVALID
A tela de aviso mostra o código como “NET::ERR_CERT_AUTHORITY_INVALID”; ferramentas de automação (logs do Playwright, Puppeteer e Selenium) informam “net::ERR_CERT_AUTHORITY_INVALID”, que é o que nossa reprodução em modo headless imprime. O Edge e outros navegadores Chromium usam o mesmo código.
Chrome, Edge and other Chromium browsers — certificate error interstitial "Your connection is not private"
O que significa
O Chrome não conseguiu encadear o certificado do site até uma raiz em que confia, por isso bloqueia a página com a tela de aviso “Your connection is not private”. O certificado pode ser autoassinado, emitido por uma CA privada, apresentado sem o certificado intermediário ou substituído por algo que intercepta a conexão. O Chrome usa o repositório do sistema operacional no Windows e no macOS (e seu próprio Chrome Root Store para CAs públicas) e o banco de dados NSS no Linux.
Por que acontece
O servidor não envia o certificado intermediário
comumO Chrome muitas vezes busca sozinho os intermediários ausentes (busca via AIA) e pode armazená-los em cache, por isso a mesma configuração incorreta falha só em algumas máquinas, aplicativos ou primeiras visitas.
Um certificado autoassinado ou de CA privada
comumRoteadores, dispositivos NAS, servidores de desenvolvimento e sites de intranet com certificados em que o navegador nunca foi instruído a confiar.
Algo intercepta a conexão
comumInspeção de HTTPS do antivírus, um proxy corporativo cuja raiz não está instalada neste dispositivo, portais cativos em Wi-Fi público ou um atacante real.
Um sistema operacional ou root store desatualizado
ocasionalInstalações muito antigas de Android ou Windows não têm as raízes públicas mais novas, então certificados modernos aparecem como não confiáveis só nelas.
Como corrigir
- 1.
Donos do site: verificar a cadeia servida
Se apenas um certificado é enviado e o emissor dele é um intermediário, a configuração do servidor está incompleta.
bash # Site owners: which certificates does the server send? (1 = intermediate missing) openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts </dev/null 2>/dev/null \ | grep -E '^ *[0-9]+ s:|^ *i:' - 2.
Donos do site: servir a cadeia completa
Configure o servidor web com o arquivo da cadeia completa para que todos os clientes (não só o Chrome) consigam verificá-la.
text # nginx: serve leaf + intermediates ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; - 3.
Sites internos: instalar a raiz privada nos dispositivos gerenciados
Distribua a raiz da empresa pelo gerenciamento de dispositivos ou pelo repositório do sistema operacional; no Linux, adicione-a ao banco de dados NSS que o Chrome lê.
bash # Internal sites: install the company root on the client (Chrome uses the OS store on # Windows and macOS; on Linux, the NSS database in ~/.pki/nssdb) certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n corp-root -i corp-root-ca.pem - 4.
Usuários: ver quem emitiu o certificado antes de qualquer outra coisa
O visualizador de certificados mostra o emissor. Clicar para ignorar o aviso (“Proceed to … (unsafe)”) só é recomendável em dispositivos seus conectados a redes em que você confia; em redes desconhecidas, isso entrega sua sessão a quem apresentou o certificado.
text Click "Not secure" in the address bar → "Certificate details" and read the issuer. A company or security-vendor name on a public site = TLS inspection on your network. An unknown issuer on public Wi-Fi = do not proceed.