Solucionar erro NET::ERR_CERT_AUTHORITY_INVALID no Chrome

17 min de leitura · · SSL, certificado-TLS, Let's Encrypt, Chrome, AviraHost, Nginx, segurança · 0

Solucionar erro NET::ERR_CERT_AUTHORITY_INVALID no Chrome exige validar a cadeia do certificado TLS, corrigir a configuração do servidor para usar o arquivo completo da cadeia, renovar o certificado se ele estiver expirado e reiniciar o serviço web. Na maioria dos casos, o problema é resolvido ao substituir certificados autoassinados, corrigir o uso de fullchain.pem e confirmar a confiança da CA no sistema cliente.

  1. Inspecione o certificado com openssl s_client para identificar a causa real.
  2. Confirme se Nginx ou Apache estão servindo o fullchain.pem.
  3. Renove o certificado Let's Encrypt se ele estiver expirado.
  4. Reinicie o servidor web e teste novamente a conexão HTTPS.
  5. Verifique se o problema está no cliente quando o erro afetar apenas alguns usuários.

Pré-requisitos para solucionar o erro NET::ERR_CERT_AUTHORITY_INVALID

  • Acesso SSH ao servidor (root ou usuário com sudo) — Ubuntu 24.04, Debian 12/13 ou AlmaLinux 9/10.
  • Certbot instalado (versão 2.x ou superior) para certificados Let's Encrypt.
  • Nginx 1.24+ ou Apache 2.4+ configurado como servidor web.
  • Domínio com DNS apontando corretamente para o IP do servidor (propagação concluída).
  • Porta 443 aberta no firewall (UFW, nftables ou CSF).
  • Acesso ao painel de hospedagem (cPanel ou similar) se o certificado for gerenciado por painel.
  • Ferramenta openssl disponível no servidor (padrão na maioria das distribuições).

Como identificar a causa real do erro NET::ERR_CERT_AUTHORITY_INVALID no Chrome

Antes de aplicar qualquer correção, é essencial entender por que o Chrome está rejeitando o certificado. O erro pode ter origens distintas e cada uma exige uma abordagem diferente. Ao clicar em "Não seguro" na barra de endereços do Chrome, você verá detalhes como "O certificado não é válido" ou "Emissor desconhecido".

No servidor, use o openssl para inspecionar o certificado em produção:

openssl s_client -connect seudominio.com.br:443 -servername seudominio.com.br

Ao rodar este comando, você verá a cadeia de certificados retornada pelo servidor. Procure pelas linhas Certificate chain e Verify return code. Um resultado saudável mostra:

Certificate chain
 0 s:CN = seudominio.com.br
   i:C = US, O = Let's Encrypt, CN = R11
 1 s:C = US, O = Let's Encrypt, CN = R11
   i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
...
Verify return code: 0 (ok)

Se o Verify return code for diferente de 0 (ok), o problema está confirmado no servidor. Os códigos mais comuns são:

  • 18 (self signed certificate): certificado autoassinado em uso.
  • 20 (unable to get local issuer certificate): cadeia intermediária incompleta.
  • 10 (certificate has expired): certificado expirado.
  • 21 (unable to verify the first certificate): CA raiz não reconhecida.

Verifique também a data de expiração diretamente:

echo | openssl s_client -connect seudominio.com.br:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jan  1 00:00:00 2025 GMT
notAfter=Apr  1 00:00:00 2025 GMT

Se notAfter estiver no passado, o certificado expirou e precisa ser renovado imediatamente.

Corrigir cadeia de certificados incompleta no Nginx

A cadeia intermediária incompleta é uma das causas mais frequentes do erro de autoridade inválida, especialmente em servidores configurados manualmente. O Nginx precisa que o arquivo ssl_certificate contenha tanto o certificado do domínio quanto os certificados intermediários da CA, nessa ordem.

Se você usa Let's Encrypt com Certbot, o arquivo correto já é o fullchain.pem. Verifique sua configuração:

grep -n "ssl_certificate" /etc/nginx/sites-enabled/seudominio.com.br
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;

Se a linha apontar para cert.pem em vez de fullchain.pem, esse é o problema. Edite o arquivo de configuração:

nano /etc/nginx/sites-enabled/seudominio.com.br

Localize o bloco server com SSL e corrija:

server {
    listen 443 ssl;
    server_name seudominio.com.br www.seudominio.com.br;

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

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ...
}

Valide a configuração antes de reiniciar:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicie o Nginx para aplicar:

systemctl restart nginx

Para validar a cadeia completa localmente:

openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /etc/letsencrypt/live/seudominio.com.br/fullchain.pem
/etc/letsencrypt/live/seudominio.com.br/fullchain.pem: OK

Em algumas distribuições, o caminho do arquivo de CAs do sistema pode variar. Se necessário, valide a cadeia usando o bundle da própria emissão, como chain.pem, ou confirme primeiro qual é o caminho correto do repositório de CAs no sistema.

Corrigir cadeia de certificados incompleta no Apache

No Apache, a configuração de certificado SSL usa diretivas diferentes do Nginx, mas o princípio é o mesmo: o arquivo de certificado deve incluir a cadeia completa. A diretiva SSLCertificateChainFile foi descontinuada no Apache 2.4.8 — a forma correta é incluir tudo em SSLCertificateFile.

Verifique o VirtualHost SSL:

grep -rn "SSLCertificate" /etc/apache2/sites-enabled/
SSLCertificateFile /etc/letsencrypt/live/seudominio.com.br/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/seudominio.com.br/privkey.pem

Se encontrar SSLCertificateChainFile ainda configurado, remova essa linha e garanta que SSLCertificateFile aponte para fullchain.pem. Exemplo de VirtualHost correto:

<VirtualHost *:443>
    ServerName seudominio.com.br
    ServerAlias www.seudominio.com.br

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/seudominio.com.br/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/seudominio.com.br/privkey.pem

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5
</VirtualHost>

Teste e reinicie o Apache:

apachectl configtest && systemctl restart apache2
Syntax OK

Se você usa cPanel para gerenciar SSL, consulte o artigo Lista Prática: 5 Vantagens de ter SSL gratuito no seu site para entender como o SSL é gerenciado no ambiente de hospedagem compartilhada.

Renovar certificado Let's Encrypt expirado com Certbot

Quando o certificado TLS expira, o Chrome exibe imediatamente o erro de autoridade inválida. A renovação automática do Let's Encrypt via Certbot normalmente ocorre antes da expiração, mas pode falhar por problemas de DNS, firewall ou configuração incorreta do cron.

Para forçar a renovação imediata de todos os certificados gerenciados pelo Certbot:

certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/seudominio.com.br.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Successfully renewed certificate for seudominio.com.br

Se quiser renovar apenas um domínio específico:

certbot renew --cert-name seudominio.com.br --force-renewal

Após a renovação, reinicie o servidor web:

# Para Nginx:
systemctl restart nginx

# Para Apache:
systemctl restart apache2

Verifique se a renovação automática está funcionando corretamente:

systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting)

Se o timer não estiver ativo, habilite-o:

systemctl enable --now certbot.timer

Para verificar quando o próximo ciclo de renovação ocorrerá:

certbot renew --dry-run

O --dry-run simula a renovação sem alterar nada, permitindo identificar problemas antes que o certificado expire de verdade. Também é recomendável verificar se o redirecionamento HTTP para HTTPS está configurado corretamente — veja o artigo Como redirecionar um site http para https? para garantir que o tráfego seja sempre servido com SSL válido.

Substituir certificado autoassinado por certificado confiável

Ambientes de desenvolvimento ou servidores configurados rapidamente frequentemente usam certificados autoassinados, que causam o NET::ERR_CERT_AUTHORITY_INVALID em qualquer navegador moderno. Para produção, o certificado deve ser emitido por uma CA reconhecida.

Para emitir um certificado Let's Encrypt gratuito com Certbot no Nginx (Debian 13 ou Ubuntu 24.04):

apt update && apt install -y certbot python3-certbot-nginx
certbot --nginx -d seudominio.com.br -d www.seudominio.com.br

O Certbot irá:

  1. Verificar a propriedade do domínio via desafio HTTP-01.
  2. Emitir o certificado e os intermediários.
  3. Modificar automaticamente a configuração do Nginx para usar fullchain.pem.
  4. Configurar o redirecionamento HTTP → HTTPS.

Para Apache no AlmaLinux 10:

dnf install -y certbot python3-certbot-apache
certbot --apache -d seudominio.com.br -d www.seudominio.com.br

Atenção: certifique-se de que a porta 80 está aberta no firewall durante o processo de validação do Certbot. Após a emissão, você pode bloquear a porta 80 novamente se desejar, mas mantenha o redirecionamento configurado no servidor web.

Após a emissão, confirme que o Chrome não exibe mais o erro acessando o site em uma aba anônima (Ctrl+Shift+N), que ignora caches de certificados anteriores.

Problemas comuns e como resolver

Sintoma: erro persiste após renovação do certificado

Causa: O servidor web não foi reiniciado após a renovação, portanto ainda está servindo o certificado antigo em memória.
Solução: Execute systemctl restart nginx ou systemctl restart apache2 imediatamente após a renovação. Para evitar que isso aconteça no futuro, adicione um hook de deploy ao Certbot: edite /etc/letsencrypt/renewal/seudominio.com.br.conf e adicione deploy_hook = systemctl reload nginx na seção [renewalparams].

Sintoma: erro aparece apenas em dispositivos móveis ou para alguns usuários

Causa: O dispositivo do usuário tem o relógio do sistema desatualizado, uma CA raiz desatualizada no sistema operacional (comum em Android antigo) ou um antivírus que intercepta conexões TLS e injeta seu próprio certificado.
Solução: Primeiro, confirme que o certificado está válido no servidor com openssl s_client -connect seudominio.com.br:443. Se o servidor estiver correto, oriente o usuário a verificar a data/hora do dispositivo, atualizar o sistema operacional ou desativar temporariamente a inspeção SSL do antivírus para testar.

Sintoma: NET::ERR_CERT_AUTHORITY_INVALID em ambiente local (localhost ou IP)

Causa: Certificados Let's Encrypt não podem ser emitidos para endereços IP ou localhost. O servidor está usando um certificado autoassinado gerado localmente.
Solução: Para desenvolvimento local, use ferramentas como mkcert para gerar certificados confiáveis localmente. Execute mkcert -install && mkcert localhost 127.0.0.1 e configure o servidor web para usar os arquivos gerados. O mkcert instala uma CA local no sistema, fazendo o Chrome confiar nos certificados gerados por ela.

Sintoma: erro de cadeia mesmo com fullchain.pem configurado

Causa: O arquivo fullchain.pem pode estar corrompido, vazio ou com permissões incorretas que impedem o servidor web de lê-lo.
Solução: Verifique o conteúdo e as permissões: ls -la /etc/letsencrypt/live/seudominio.com.br/ e openssl x509 -in /etc/letsencrypt/live/seudominio.com.br/fullchain.pem -noout -text | head -20. Confirme também se o arquivo realmente contém o certificado do domínio seguido dos intermediários, por exemplo com grep -c "BEGIN CERTIFICATE" /etc/letsencrypt/live/seudominio.com.br/fullchain.pem. O arquivo deve ser legível pelo usuário do servidor web. Se estiver corrompido, force a renovação com certbot renew --force-renewal.

Sintoma: Certbot falha ao renovar com erro de validação DNS

Causa: O domínio não está apontando para o IP do servidor, ou a porta 80 está bloqueada no firewall, impedindo o desafio HTTP-01 do Let's Encrypt.
Solução: Verifique o DNS com dig +short seudominio.com.br A e confirme que retorna o IP correto do servidor. Verifique se a porta 80 está aberta: ufw status ou nft list ruleset | grep 80. Se usar Cloudflare, certifique-se de que o proxy (nuvem laranja) está desativado durante a renovação, ou use o desafio DNS-01 com o plugin do Cloudflare.

Perguntas frequentes sobre NET::ERR_CERT_AUTHORITY_INVALID

O que causa o erro NET::ERR_CERT_AUTHORITY_INVALID?

O erro ocorre quando o navegador não consegue verificar a cadeia de confiança do certificado TLS. As causas mais comuns são: certificado autoassinado, cadeia intermediária incompleta no servidor, certificado expirado ou emitido por uma CA não reconhecida pelo sistema operacional do cliente. Em todos os casos, o Chrome bloqueia o acesso para proteger o usuário de possíveis ataques man-in-the-middle.

Como renovar o certificado Let's Encrypt para corrigir esse erro?

Execute o comando certbot renew --force-renewal no servidor para forçar a renovação imediata. Após a renovação, reinicie o servidor web (Nginx ou Apache) para que o novo certificado seja carregado. Verifique a validade com openssl s_client -connect seudominio.com:443. Para evitar expirações futuras, confirme que o timer do Certbot está ativo com systemctl status certbot.timer.

O erro NET::ERR_CERT_AUTHORITY_INVALID aparece só para alguns usuários. Por quê?

Isso geralmente indica que o problema está no dispositivo do usuário, como um relógio do sistema desatualizado, uma CA raiz desatualizada no sistema operacional ou um antivírus que intercepta conexões TLS. Verifique se o certificado está válido no servidor antes de investigar o lado do cliente. Se o openssl s_client retornar Verify return code: 0 (ok), o servidor está correto e o problema é exclusivamente do dispositivo do usuário.

Certificado autoassinado causa esse erro?

Sim. Certificados autoassinados não são emitidos por uma Autoridade Certificadora (CA) reconhecida pelos navegadores, por isso o Chrome exibe NET::ERR_CERT_AUTHORITY_INVALID. Para produção, substitua por um certificado emitido por uma CA confiável, como Let's Encrypt, que é gratuito. Para ambientes de desenvolvimento local, use o mkcert para criar uma CA local confiável no seu sistema.

Como verificar se a cadeia de certificados está completa no Nginx?

No Nginx, o arquivo configurado em ssl_certificate deve conter o certificado do domínio seguido dos certificados intermediários — o fullchain.pem do Let's Encrypt já inclui tudo automaticamente. Use openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /etc/nginx/ssl/fullchain.pem para validar a cadeia completa. Se o resultado for OK, a cadeia está correta. Você também pode usar ferramentas online como o SSL Labs para uma verificação mais detalhada a partir de fora do servidor.

Conclusão

  • Diagnostique primeiro: use openssl s_client -connect seudominio.com.br:443 para identificar se o problema é cadeia incompleta, certificado expirado ou autoassinado antes de aplicar qualquer correção.
  • Use sempre fullchain.pem: tanto no Nginx quanto no Apache, configure ssl_certificate ou SSLCertificateFile para apontar para o fullchain.pem do Let's Encrypt, nunca para o cert.pem isolado.
  • Automatize a renovação: confirme que o certbot.timer está ativo e adicione um deploy_hook para reiniciar o servidor web automaticamente após cada renovação bem-sucedida.

Leia também

Precisa de ajuda com SSL e certificados no seu servidor?

Configurar e manter certificados TLS corretamente pode ser desafiador, especialmente em ambientes com múltiplos domínios ou configurações personalizadas. A AviraHost oferece hospedagem com SSL gerenciado e suporte técnico para ajudar a resolver erros de certificado sem complicação.

Conheça os planos de hospedagem da AviraHost com SSL incluso


Esta resposta foi útil?