17 min de leitura · Guia técnico
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.
- Inspecione o certificado com
openssl s_clientpara identificar a causa real. - Confirme se Nginx ou Apache estão servindo o
fullchain.pem. - Renove o certificado Let's Encrypt se ele estiver expirado.
- Reinicie o servidor web e teste novamente a conexão HTTPS.
- 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
openssldisponí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á:
- Verificar a propriedade do domínio via desafio HTTP-01.
- Emitir o certificado e os intermediários.
- Modificar automaticamente a configuração do Nginx para usar
fullchain.pem. - 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:443para 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_certificateouSSLCertificateFilepara apontar para ofullchain.pemdo Let's Encrypt, nunca para ocert.pemisolado. - Automatize a renovação: confirme que o
certbot.timerestá ativo e adicione umdeploy_hookpara reiniciar o servidor web automaticamente após cada renovação bem-sucedida.
Leia também
- Solucionar erro de conexão FTP no cPanel: passo a passo definitivo
- Solucionar erro 'Permission denied' no wp-content: causa e correção
- Guia de Backup, Restore e Snapshot: diferenças práticas e quando usar cada um
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