Resolvendo "certificate expired" e erros comuns de SSL/TLS: Um Guia Completo
O SSL (Secure Sockets Layer) e seu sucessor, o TLS (Transport Layer Security), são os protocolos que mantêm a internet segura. Eles garantem que os dados enviados entre seu navegador e um site sejam criptografados e privados. No entanto, quando algo dá errado com um certificado, os navegadores exibem páginas de aviso assustadoras que podem afastar 99% dos seus visitantes.
Neste guia, explicaremos os erros de SSL/TLS mais comuns, por que eles acontecem e como corrigi-los tanto para usuários quanto para proprietários de sites.
1. Mensagens de Erro Comuns de SSL/TLS
Dependendo do seu navegador (Chrome, Firefox, Safari) ou seu ambiente de desenvolvimento (Node.js, Python), você verá diferentes códigos de erro:
- Chrome:
ERR_CERT_DATE_INVALID,ERR_CERT_AUTHORITY_INVALID,ERR_CERT_COMMON_NAME_INVALID,ERR_SSL_PROTOCOL_ERROR - Node.js:
CERT_HAS_EXPIRED,UNABLE_TO_VERIFY_LEAF_SIGNATURE,SELF_SIGNED_CERT_IN_CHAIN - Python (Requests):
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed - Firefox:
SEC_ERROR_EXPIRED_CERTIFICATE,MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
2. Principais Causas e Soluções
2.1 "certificate expired" (ERR_CERT_DATE_INVALID)
Os certificados SSL são emitidos para um período específico (geralmente de 90 dias a 1 ano). Assim que essa data passa, o certificado não é mais válido.
A Causa: O proprietário do site esqueceu de renovar o certificado ou o processo de renovação automática (como Let's Encrypt) falhou.
A Solução:
- Para Proprietários: Renove seu certificado imediatamente. Se estiver usando Let's Encrypt, verifique seus logs do
certbotou sua configuração do cliente ACME. - Para Usuários: Verifique a data e hora do sistema do seu computador. Se o seu relógio estiver errado, o navegador pensará que um certificado válido expirou.
2.2 "self-signed certificate" (ERR_CERT_AUTHORITY_INVALID)
Por padrão, os navegadores apenas confiam em certificados emitidos por uma "Autoridade de Certificação" (CA) conhecida, como DigiCert ou Let's Encrypt. Um certificado autoassinado (self-signed certificate) é um que você mesmo criou.
A Causa:
- Usar um certificado autoassinado em um site de produção.
- Uma CA privada/corporativa que não foi adicionada ao repositório de "Raiz Confiável" do seu computador.
A Solução:
- Para Produção: Obtenha um certificado gratuito da Let's Encrypt ou um pago de uma CA comercial.
- Para Desenvolvimento: Não há problema em usar certificados autoassinados localmente, mas você precisará dizer às suas ferramentas para confiar neles ou ignorar a verificação (embora o último seja inseguro).
2.3 "certificate chain incomplete" (UNABLE_TO_VERIFY_LEAF_SIGNATURE)
Um certificado SSL não é apenas um arquivo; é uma cadeia de confiança que leva de volta a uma CA Raiz. Se um certificado "intermediário" (uma CA Intermediária) estiver faltando na configuração do seu servidor, o navegador não poderá verificar a cadeia.
La Causa: O servidor está servindo apenas o certificado "Leaf" (do site) e não a cadeia completa ou "Fullchain" (Site + Intermediário).
A Solução:
Certifique-se de que seu servidor web (Nginx, Apache) esteja configurado para usar o arquivo fullchain.pem (ou equivalente) fornecido pela sua CA.
2.4 "SSL handshake failed"
Este é um erro amplo que ocorre durante o "aperto de mão" (handshake) inicial entre o cliente e o servidor.
A Causa:
- Protocolos incompatíveis (ex: o cliente suporta apenas TLS 1.0, mas o servidor exige TLS 1.3).
- Conjuntos de cifras (cipher suites) incompatíveis.
- Firewall ou proxy no lado do servidor bloqueando a conexão.
A Solução: Verifique a configuração TLS do seu servidor. Recomendamos o uso do Mozilla SSL Configuration Generator para obter configurações seguras e compatíveis.
3. Solução de Problemas Avançada
3.1 Problemas de SNI (Server Name Indication)
Em servidores modernos que hospedam vários sites em um único endereço IP, o servidor precisa saber qual certificado exibir. Se o cliente não suportar SNI (raro hoje em dia), o servidor poderá exibir o certificado errado, levando a um erro COMMON_NAME_INVALID.
3.2 HSTS (HTTP Strict Transport Security)
Se um site usa HSTS, o navegador se recusará a permitir que o usuário "proceda de qualquer maneira" em um erro de SSL. Este é um recurso de segurança para evitar ataques de "Man-in-the-Middle". Solução: Você deve corrigir o erro de SSL; não há desvio para o HSTS.
4. Prevenção e Melhores Práticas
- Renovação Automática: Sempre use um serviço com renovação automática (como Let's Encrypt com Certbot ou o SSL Gerenciado da Cloudflare).
- Monitoramento: Use um serviço para monitorar a expiração e a integridade do seu certificado SSL.
- Use a Cadeia Completa: Sempre forneça a cadeia de certificados completa na configuração do seu servidor.
- Desative Protocolos Fracos: Desative SSLv2, SSLv3, TLS 1.0 e TLS 1.1. Permita apenas TLS 1.2 e 1.3.
5. FAQ: Perguntas Frequentes
P: É seguro clicar em "Proceder de qualquer maneira" em um aviso de SSL?
R: Somente se você for um desenvolvedor testando seu próprio site local. Nunca faça isso em um site público, especialmente bancos, e-mails ou redes sociais, pois isso o torna vulnerável a roubo de dados.
P: Por que meu site funciona no desktop, mas exibe um erro de SSL no celular?
R: Geralmente, isso é um problema de certificate chain incomplete (cadeia de certificados incompleta). Os navegadores de desktop são melhores em "preencher as lacunas" de certificados intermediários ausentes, enquanto os navegadores móveis são muito mais rígidos.
P: A Cloudflare corrige erros de SSL?
R: A Cloudflare pode ocultar erros de SSL entre o usuário e a Cloudflare, mas você ainda precisa de um certificado válido (ou pelo menos um certificado Cloudflare Origin) entre a Cloudflare e seu servidor para estar totalmente seguro.
6. Ferramenta de Verificação Rápida
Precisa inspecionar um certificado ou verificar uma cadeia? Use nosso SSL Certificate Checker & Decoder. Ele permite:
- Decodificar arquivos PEM e CRT para ver datas de expiração e informações do emissor.
- Verificar cadeias de certificados e identificar intermediários ausentes.
- Converter entre formatos como PEM, DER e PFX.
Erros Relacionados
- Resolvendo erros 'Unexpected token in JSON'
- Como corrigir erros 'invalid base64 string'
- Resolvendo 'JWT expired' e erros comuns de JWT