Erro Sua Conexão Não É Privada (SSL): Como Diagnosticar e Resolver

Resolva o erro NET::ERR_CERT_AUTHORITY_INVALID e variantes SSL no navegador identificando a causa real — certificado, cadeia, data ou DNS.

O aviso “Sua conexão não é privada” no Chrome (ou “Aviso: risco potencial de segurança à frente” no Firefox) é uma das telas mais ambíguas da web moderna. Por trás de uma única mensagem amigável, o navegador esconde mais de quinze códigos de erro distintos — cada um apontando pra uma causa raiz diferente. Tratar todos como o mesmo problema leva a tentativas erradas: renovar um certificado que está válido, mexer no DNS quando o problema é relógio, ou pior, instruir o usuário final a clicar em “Avançar” e expor a conexão.

Este guia é pra quem opera um servidor próprio (VPS ou bare-metal) e precisa identificar rapidamente qual é o problema real, separar o que é responsabilidade do servidor do que é do cliente, e aplicar a correção certa. O processo completo leva entre 10 e 20 minutos, dependendo da causa.

A premissa fundamental: o erro SSL é sempre específico. Antes de tocar em qualquer configuração, você precisa ler o código exato que o navegador mostra e decidir o caminho de diagnóstico.

Pré-requisitos

Pré-requisitos

Acesso SSH ao servidor (sudo ou root), navegador atualizado (Chrome 117+ ou Firefox 120+) e ferramentas de linha de comando openssl, curl e dig instaladas. Em Ubuntu/Debian: sudo apt install -y openssl curl dnsutils. Conhecimento básico de como o seu servidor web está configurado (nginx, Apache ou Caddy).

Porta HTTPS 443
Caminho típico do certificado /etc/letsencrypt/live/dominio/
Arquivo correto pra cadeia fullchain.pem

Identifique o código de erro exato

Antes de mexer em qualquer coisa, abra a página do erro no navegador e clique em “Avançado” (Chrome) ou “Detalhes técnicos” (Firefox). Você vai ver um código no formato NET::ERR_CERT_* ou SEC_ERROR_*. Esse código é o ponto de partida — cada um exige tratamento diferente.

A tabela abaixo cobre os mais comuns:

CódigoCausa provávelOnde corrigir
NET::ERR_CERT_AUTHORITY_INVALIDCA não confiável ou cadeia incompletaServidor
NET::ERR_CERT_DATE_INVALIDCertificado expirado ou relógio erradoServidor ou cliente
NET::ERR_CERT_COMMON_NAME_INVALIDCertificado pra outro domínioServidor
NET::ERR_CERT_REVOKEDCertificado revogado pela CAServidor (reemitir)
NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHMAlgoritmo SHA-1 obsoletoServidor (reemitir SHA-256+)
SSL_ERROR_BAD_CERT_DOMAINDomínio acessado não bate com SANServidor
NET::ERR_SSL_PROTOCOL_ERRORTLS handshake falhou (versão/cipher)Servidor
01

Anote o código exato do erro e o domínio (incluindo subdomínio) onde aparece. A diferença entre www.site.com.br e site.com.br é crítica — um certificado emitido só pra um não cobre o outro automaticamente.

02

Teste em outro dispositivo na mesma rede e em uma rede diferente (4G do celular, por exemplo). Se o erro aparece em todos, é problema de servidor. Se aparece só em um, é local.

Diagnostique do lado do servidor

Use openssl s_client pra ver exatamente o que o servidor está apresentando ao navegador. Esse comando é o equivalente técnico de “abrir a página” — sem cache, sem extensões, sem ambiguidade.

03

Conecte ao seu domínio e capture a cadeia completa:

openssl s_client -connect dominio.com.br:443 \
  -servername dominio.com.br \
  -showcerts < /dev/null

A flag -servername é obrigatória — sem ela, servidores com múltiplos sites (SNI) podem entregar o certificado errado. A saída lista cada certificado servido entre -----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----.

04

Verifique quantos certificados aparecem. Em uma configuração saudável você vê pelo menos 2: o leaf (do seu domínio) e o intermediário (da CA). Se aparecer só 1, a cadeia está incompleta — essa é a causa mais comum de NET::ERR_CERT_AUTHORITY_INVALID em servidores que “funcionavam até semana passada”.

05

Extraia data de validade e domínios cobertos:

echo | openssl s_client -connect dominio.com.br:443 \
  -servername dominio.com.br 2>/dev/null | \
  openssl x509 -noout -dates -subject -ext subjectAltName

Você deve ver notBefore e notAfter (validade), o subject (domínio principal) e a lista de SAN (Subject Alternative Names — todos os domínios que o cert cobre).

Confirme antes de renovar

Não tente renovar um certificado antes de confirmar que o problema é validade. Renovar um certificado que está válido mas com cadeia incompleta não resolve nada — você só vai trocar um leaf válido por outro leaf válido, mantendo o problema real.

Corrija problemas de cadeia incompleta

Cadeia incompleta é o erro de configuração mais comum em servidores Linux. Você gerou o certificado, copiou pro nginx, e tudo parece OK — mas o servidor está servindo só o leaf, sem o intermediário.

06

Em servidores nginx com Let’s Encrypt, a diretiva ssl_certificate deve apontar pra fullchain.pem, não pra cert.pem:

ssl_certificate     /etc/letsencrypt/live/dominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dominio.com.br/privkey.pem;

O fullchain.pem é a concatenação do leaf + intermediário(s) na ordem correta. O cert.pem contém só o leaf — usar ele quebra clientes que não cacheiam o intermediário (boa parte dos Android antigos, sistemas embarcados, alguns sistemas operacionais corporativos).

07

Recarregue a configuração sem reiniciar:

sudo nginx -t && sudo systemctl reload nginx

O nginx -t valida a sintaxe antes do reload — se falhar, sua configuração antiga continua rodando.

08

Em Apache, a diretiva equivalente é SSLCertificateFile, e desde a versão 2.4.8 ela aceita o fullchain. Em versões mais antigas você precisa de SSLCertificateChainFile apontando separadamente pro intermediário. Confira sua versão com apache2 -v (Debian/Ubuntu) ou httpd -v (RHEL/CentOS).

Corrija problemas de data e relógio

Se o código é NET::ERR_CERT_DATE_INVALID, há duas possibilidades: o certificado realmente expirou (servidor) ou o relógio do cliente está errado (local). Diferenciar é direto.

09

No servidor, verifique a hora atual e o serviço NTP:

timedatectl status

Procure por System clock synchronized: yes e NTP service: active. Se algum estiver no ou inactive:

sudo timedatectl set-ntp true
sudo systemctl restart systemd-timesyncd

Servidores virtuais que ficaram suspensos por muito tempo (snapshot restaurado, migração entre nodes) frequentemente acordam com relógio defasado — o certificado válido fica aparentemente expirado até o NTP sincronizar.

10

Compare a data do servidor com a validade do certificado:

date -u
echo | openssl s_client -connect dominio.com.br:443 \
  -servername dominio.com.br 2>/dev/null | \
  openssl x509 -noout -enddate

Se a data atual for posterior ao notAfter, o certificado expirou — renove. Se for anterior ao notBefore, o certificado foi emitido pro futuro (raro, geralmente erro de timezone na hora da emissão).

Verifique se a correção funcionou

Depois de aplicar o fix, valide em três camadas — servidor, cadeia pública e navegador real.

11

Limpe o cache do navegador e teste em janela anônima. Cache de certificados é agressivo: o Chrome pode segurar um certificado antigo por até 24 horas em alguns casos. Janela anônima ignora boa parte desse cache.

12

Rode um teste externo via SSL Labs:

curl -sI https://api.ssllabs.com/api/v3/analyze?host=dominio.com.br

Ou abra https://www.ssllabs.com/ssltest/analyze.html?d=dominio.com.br no navegador. Você quer nota A ou A+. Notas B/C indicam problemas adicionais (protocolos fracos, ciphers obsoletos) que valem corrigir mesmo que o erro principal já tenha sumido.

Teste de múltiplos clientes

Validar só no Chrome do seu desktop não é suficiente. Teste em pelo menos: Firefox (store de CA independente), Safari iOS (validação mais rigorosa) e curl da linha de comando (curl -v https://dominio.com.br). Se os três funcionarem sem warning, sua configuração está sólida.

Resolução de problemas frequentes

Erro só aparece em www mas não na raiz (ou vice-versa)

Seu certificado cobre só um dos dois. Reemita incluindo ambos os nomes. Com certbot:

sudo certbot --nginx -d dominio.com.br -d www.dominio.com.br

O -d aceita múltiplos domínios numa única solicitação — eles vão pro mesmo certificado via SAN.

Erro depois de instalar antivírus ou proxy corporativo

Antivírus que fazem inspeção TLS (Kaspersky, BitDefender, ESET) instalam uma CA própria na máquina e reassinam todo tráfego HTTPS. Se essa CA não estiver no trust store do navegador, todo site quebra. Solução: desabilitar inspeção SSL no antivírus ou aceitar a CA dele manualmente. Em redes corporativas com proxy (Zscaler, Forcepoint), o time de TI precisa distribuir a CA da empresa via política de grupo.

Renovação automática parou de funcionar

Verifique o cron do certbot e os logs:

sudo systemctl status certbot.timer
sudo journalctl -u certbot --since "30 days ago"

Causas comuns: porta 80 bloqueada no firewall (challenge HTTP-01 falha), DNS apontando pra IP errado depois de migração, ou rate limit do Let’s Encrypt (5 falhas por hora pelo mesmo domínio).

Próximos passos

Depois de resolver o erro imediato, vale endurecer a configuração TLS pra evitar recorrência. Considere habilitar HSTS (HTTP Strict Transport Security) com Strict-Transport-Security: max-age=31536000; includeSubDomains — isso força o navegador a usar HTTPS por um ano e elimina ataques de downgrade. Monitore expiração de certificados com ferramentas como Uptime Kuma ou um cron simples que dispara alerta 14 dias antes do notAfter. Para sites com tráfego sério, habilite OCSP stapling (ssl_stapling on no nginx) — reduz latência da primeira conexão e diminui dependência das CAs.

Se você está colocando isso em produção, uma VPS Hostini já vem com certbot pré-instalado e renovação automática configurada — você só aponta o DNS e roda o comando de emissão.

Perguntas frequentes

Por que o erro aparece só em alguns navegadores e em outros não?

Cada navegador mantém sua própria lista de autoridades certificadoras raiz confiáveis. Chrome e Edge usam a store do sistema operacional, Firefox tem store própria. Se o certificado foi emitido por uma CA que o Firefox conhece mas o Windows não, só o Chrome vai reclamar. Também influencia: política de revogação (Chrome respeita CRLite, Firefox usa OCSP) e suporte a algoritmos mais antigos.

O cadeado verde no Chrome desapareceu mas o site funciona — o certificado está válido?

Não necessariamente. O Chrome 117+ removeu o ícone de cadeado da UI por padrão e mostra apenas um ícone neutro de configurações. Clique no ícone e veja Conexão é segura para confirmar. Se aparecer Não segura ou um triângulo amarelo, há problema real — geralmente conteúdo misto (HTTPS carregando recurso HTTP) ou certificado vencendo em menos de 7 dias.

NET::ERR_CERT_AUTHORITY_INVALID em servidor com Let's Encrypt funcionando há meses — o que mudou?

Quase sempre é cadeia intermediária incompleta após renovação. Let's Encrypt mudou a raiz cruzada (ISRG Root X1 vs DST Root CA X3) em 2024, e configurações antigas que serviam só o leaf sem o intermediário R3 quebraram em clientes Android antigos e alguns sistemas. Sirva a fullchain.pem (não o cert.pem) na diretiva ssl_certificate.

O erro aparece em uma máquina específica da rede e em mais nenhuma — é problema do servidor?

Não. Se uma única máquina vê o erro enquanto as outras na mesma rede acessam normal, o problema é local: relógio fora de sincronia, antivírus interceptando TLS (Kaspersky, BitDefender, ESET fazem isso), proxy corporativo com CA própria não instalada, ou extensão de navegador interferindo. Comece pelo relógio.

Como verifico se a cadeia de certificados está completa antes de subir pra produção?

Use openssl s_client -connect dominio.com:443 -servername dominio.com -showcerts. A saída lista todos os certificados servidos. Você deve ver o leaf, o intermediário e idealmente a raiz. Se aparecer só 1 certificado, a cadeia está incompleta. Ferramentas como SSL Labs (ssllabs.com/ssltest) e testssl.sh dão diagnóstico mais visual e detectam outros problemas (protocolos fracos, ciphers obsoletos).

Posso ignorar o aviso e continuar — é seguro?

Depende da causa. Se for o seu próprio servidor de testes com certificado autoassinado, sim. Se for um site público que você não controla, não. O aviso pode indicar interceptação ativa por atacante (MITM em Wi-Fi público), CA comprometida ou phishing. Nunca clique em Continuar para sites onde você vai digitar senha, cartão ou dados sensíveis.

Tópicos:
Próximos passos Cloud Ryzen com NVMe e proteção DDoS sempre ativa.Coloque em produção numa VPS Hostini →
Esse tutorial foi útil?
Falar no WhatsApp