Problemas com certificados SSL são um dos problemas técnicos mais perturbadores que um site pode ter. Um certificado expirado bloqueia todos os visitantes com um aviso no navegador. Um certificado mal configurado causa falhas silenciosas. Um certificado emitido para o domínio errado quebra subdomínios. E, diferentemente da maioria dos problemas, os problemas de certificados acontecem de acordo com uma programação — eles expiram — portanto, são totalmente evitáveis ​​se você souber onde procurar.

Veja como verificar qualquer certificado SSL, o que cada campo significa e o que fazer quando algo está errado.

A verificação rápida: seu navegador

Para qualquer site que você estiver visitando, a verificação SSL mais rápida está diretamente no seu navegador.

Cromo/Borda: Clique no ícone de cadeado (ou no texto "A conexão é segura") ao lado do URL → O certificado é válido → Detalhes do certificado

Firefox: Clique no ícone de cadeado → Conexão segura → Mais informações → Ver certificado

Isso mostra:

  • Para quem o certificado foi emitido (o domínio)
  • Quem emitiu (a Autoridade Certificadora)
  • Válido de / Válido até datas
  • O número de série e impressão digital do certificado

Para uma verificação rápida de integridade — este certificado é válido e pertence ao domínio correto — a UI do navegador é tudo que você precisa.

A verificação completa: ferramenta online

Para uma análise completa de um certificado, incluindo conjuntos de criptografia, validade da cadeia, configuração HSTS e vulnerabilidades conhecidas, use o Ferramenta verificador SSL. Insira qualquer domínio e ele fará uma análise completa sem precisar instalar nada.

Isto é especialmente útil para:

  • Certificados em servidores que você não pode acessar diretamente
  • Verificando um novo certificado após a instalação
  • Verificando certificados antes que eles expirem
  • Auditoria da força do conjunto de cifras (TLS 1.0/1.1 deve ser desabilitado)

A linha de comando: openssl

Para desenvolvedores e administradores de sistemas, openssl oferece inspeção direta do certificado do terminal.

Verifique o certificado de um servidor remoto:

Comando
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -text

Isso retorna os detalhes completos do certificado. Campos principais a serem observados:

Data de validade:

Comando
openssl s_client -connect example.com:443 -servername example.name </dev/null 2>/dev/null | openssl x509 -noout -dates

Saída:

Comando
notBefore=Jan  1 00:00:00 2025 GMT
notAfter=Jan  1 00:00:00 2026 GMT

Verifique um arquivo de certificado local:

Comando
openssl x509 -in certificate.crt -noout -text
openssl x509 -in certificate.crt -noout -dates
openssl x509 -in certificate.crt -noout -subject -issuer

Verifique uma cadeia de certificados:

Comando
openssl verify -CAfile chain.pem certificate.crt

Verifique os dias até o vencimento (programável):

Comando
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} date -d {} +%s | xargs -I{} expr \( {} - $(date +%s) \) / 86400

Retorna o número de dias restantes. Útil no monitoramento de scripts.

O que cada campo de certificado significa

Assunto/Nome Comum (CN): O domínio para o qual o certificado foi emitido. Deve corresponder ao domínio que você está visitando ou o navegador mostrará um aviso. Para certificados curinga, isso é *.example.com.

Nomes alternativos de assunto (SANs): A lista de todos os domínios que o certificado cobre. Os certificados modernos usam SANs em vez de apenas CN. Um certificado pode cobrir example.com, www.example.come api.example.com — todos listados aqui. Isto é o que o navegador realmente verifica.

Emissor: A Autoridade Certificadora (CA) que assinou o certificado. Mais comuns: Let's Encrypt, DigiCert, Sectigo, Google Trust Services, Amazon. O próprio certificado do emissor é assinado por uma CA raiz confiável pelos navegadores.

Período de validade: Não antes e nem depois das datas. Os certificados expiram – os certificados Let's Encrypt expiram a cada 90 dias (com renovação automática). Os certificados comerciais normalmente duram 1 ano.

Algoritmo chave e tamanho: RSA 2048 bits é o mínimo; 4096 bits ou EC P-256 são mais fortes. Os certificados EC (curva elíptica) oferecem segurança equivalente com tamanhos de chave menores, o que melhora marginalmente o desempenho.

Versão TLS: Seu servidor deve suportar TLS 1.2 e TLS 1.3. TLS 1.0 e 1.1 estão obsoletos e devem ser desativados — os navegadores modernos recusam conexões com eles.

Transparência do certificado: Os certificados modernos são registrados em logs públicos de Transparência de Certificados. Isso é obrigatório para certificados confiáveis ​​pelo Chrome. Ele permite que qualquer pessoa audite quais certificados foram emitidos para um domínio – útil para detectar certificados não autorizados.

Problemas comuns de SSL e como corrigi-los

Certificado expirado O problema mais comum. Seu navegador mostra "Sua conexão não é privada" com erro NET::ERR_CERT_DATE_INVALID.

Correção: Renove o certificado. Se você estiver usando Let's Encrypt com Certbot, execute certbot renew. Se estiver usando um certificado pago, adquira uma renovação por meio de sua CA e instale-a. Configure o monitoramento para alertá-lo 30 dias antes do vencimento, para que isso nunca aconteça na produção.

Incompatibilidade de domínio de certificado O certificado foi emitido para example.com mas você está visitando www.example.com (ou vice-versa), e o certificado não inclui o outro como SAN.

Correção: Obtenha um certificado que cubra ambos (a maioria dos certificados deveria) ou redirecione um para o outro de forma consistente.

Cadeia de certificados incompleta Seu servidor está apresentando seu certificado, mas não os certificados intermediários que o conectam a uma CA raiz confiável. Os navegadores que armazenaram o intermediário em cache podem se conectar; outros veem um erro.

Correção: Configure seu servidor web para enviar a cadeia completa. Com Nginx, use ssl_certificate apontando para um arquivo que inclui seu certificado e o pacote intermediário. Com o Apache, use SSLCertificateChainFile.

Verifique esse problema especificamente:

Comando
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -A 1 "Certificate chain"

Você deverá ver pelo menos 2 certificados na cadeia (seu certificado + intermediário).

Certificado autoassinado Os navegadores não confiam em certificados que não sejam assinados por uma CA reconhecida. Certificados autoassinados são adequados para desenvolvimento interno, mas acionarão avisos para qualquer site público.

Correção: Obtenha um certificado de uma CA confiável. Let's Encrypt é gratuito e automatizado para domínios públicos.

Conjunto de criptografia fraco O servidor negocia uma conexão TLS usando algoritmos desatualizados ou fracos (RC4, DES, cifras de nível de exportação, TLS 1.0/1.1).

Verifique com:

Comando
nmap --script ssl-enum-ciphers -p 443 example.com

Correção: atualize a configuração SSL do seu servidor web apenas para conjuntos de criptografia modernos. da Mozilla Gerador de configuração SSL gera configurações prontas para colar para Nginx, Apache e outros.

Monitoramento de Certificado

A verificação manual dos certificados antes que eles expirem não é escalonável. Opções para monitoramento automatizado:

Renovação automática do Certbot: Se você estiver usando o Let's Encrypt, o Certbot configura um cron job ou um timer do systemd que renova automaticamente os certificados quando eles têm menos de 30 dias restantes. Verifique se está funcionando: certbot renew --dry-run

Serviços de monitoramento de tempo de atividade: A maioria dos monitores de tempo de atividade (UptimeRobot, Freshping, Better Uptime) inclui alertas de expiração de certificado. Defina um limite de aviso de 30 dias.

Script personalizado no cron: Um script bash simples usando o openssl acima pode verificar a expiração e enviar um alerta por e-mail. O comando

Comando
#!/bin/bash
DOMAIN="example.com"
DAYS_LEFT=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} python3 -c "from datetime import datetime; print((datetime.strptime('{}', '%b %d %H:%M:%S %Y %Z') - datetime.utcnow()).days)")
if [ "$DAYS_LEFT" -lt 30 ]; then
    echo "Certificate for $DOMAIN expires in $DAYS_LEFT days" | mail -s "SSL Warning" admin@example.com
fi

O resultado final

Os problemas de certificados são previsíveis e evitáveis. Os principais – expiração, incompatibilidade de domínio, cadeia incompleta – aparecem claramente em uma verificação SSL.

Execute uma verificação em qualquer domínio com o Ferramenta verificador SSL. Para servidores de produção, configure o monitoramento de expiração com uma janela de alerta de pelo menos 30 dias. E se você ainda estiver no TLS 1.0 ou 1.1, desative-os – qualquer servidor moderno deve ser apenas TLS 1.2+.