Um certificado SSL expirado faz com que os navegadores mostrem um aviso de segurança em tela cheia, impedindo os visitantes de acessar seu site. Veja como verificar quando seu certificado expira e configurar monitoramento.
Verificar pelo navegador
- Visite seu site com
https:// - Clique no ícone de cadeado na barra de endereços
- Clique em “Certificado” ou “A conexão é segura” → “O certificado é válido”
- Procure a data “Válido até” ou “Expira em”
Verificar com OpenSSL (linha de comando)
Verificação remota (de qualquer máquina)
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -enddate
Saída: notAfter=Aug 5 12:00:00 2026 GMT
Verificação de arquivo local
openssl x509 -noout -enddate -in /etc/ssl/gethttps/fullchain.pem
Verificar todos os detalhes de uma vez
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
Verificar com um script de uma linha
Verificar se um certificado expira dentro de 30 dias:
if openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -checkend 2592000 > /dev/null 2>&1; then
echo "Certificate is valid for at least 30 more days"
else
echo "WARNING: Certificate expires within 30 days!"
fi
Verificar múltiplos domínios de uma vez
Se você gerencia vários domínios, verifique todos em um loop:
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$domain — expires: $expiry"
done
Monitoramento automatizado com cron
Crie um job cron diário que envia um email quando um certificado está a 30 dias da expiração:
#!/bin/bash
# Save as /usr/local/bin/check-ssl-expiry.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
WARN_SECS=$((WARN_DAYS * 86400))
for domain in $DOMAINS; do
if ! echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | \
openssl x509 -noout -checkend $WARN_SECS > /dev/null 2>&1; then
echo "WARNING: $domain certificate expires within $WARN_DAYS days" | \
mail -s "SSL Expiry Warning: $domain" admin@example.com
fi
done
Adicione ao crontab: 0 9 * * * /usr/local/bin/check-ssl-expiry.sh
Configurar serviços de monitoramento
Para uma abordagem mais robusta, use um serviço de monitoramento:
| Método | Como | Custo | Opções de alerta |
|---|---|---|---|
| Lembrete no calendário | Configure para 60 dias após a emissão | Gratuito | Manual |
| Script cron | Execute o script de verificação diariamente | Gratuito | |
| UptimeRobot | Adicione monitor SSL, defina limite de alerta | Plano gratuito | Email, Slack, webhook |
| Better Uptime | Monitoramento SSL com gerenciamento de incidentes | Plano gratuito | Email, SMS, Slack |
| Renovação automática do Certbot | certbot renew via systemd timer | Gratuito | Previne a expiração completamente |
Para certificados de 90 dias do Let’s Encrypt, renove no dia 60 (margem de 30 dias).
Quais detalhes do certificado devo verificar?
Além da data de expiração, verifique periodicamente:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -E 'Subject:|Issuer:|Not After|DNS:'
Isso mostra:
- Subject/SAN — o certificado cobre os domínios corretos
- Issuer — emitido pela CA esperada (ex.: Let’s Encrypt)
- Not After — data de expiração
- DNS names — todos os nomes de domínio no campo SAN
Perguntas frequentes
O que acontece quando um certificado expira?
Os navegadores mostram um aviso em tela cheia como “Sua conexão não é particular” (Chrome) ou “Aviso: Risco potencial de segurança à frente” (Firefox). A maioria dos visitantes sairá imediatamente. Os mecanismos de busca também podem rebaixar ou desindexar suas páginas até que o certificado seja renovado.
Com que frequência devo verificar?
Se você tem renovação automática (Certbot), verifique mensalmente como rede de segurança. Se você renova manualmente (GetHTTPS), verifique no dia 50 e configure um lembrete firme no dia 60. Com a validade de 47 dias chegando em 2029, o monitoramento se torna ainda mais crítico.
Posso verificar a expiração sem acesso à linha de comando?
Sim. Ferramentas online como SSL Labs Server Test e SSL Shopper’s SSL Checker mostram detalhes do certificado incluindo datas de expiração — basta inserir seu domínio. O DevTools do navegador também mostra (ícone de cadeado → Detalhes do certificado).
E se meu certificado já expirou?
Renove imediatamente. Visite GetHTTPS para obter um novo certificado, substitua os arquivos no seu servidor e recarregue o servidor web. O processo leva 5 minutos. Não há penalidade por deixar um certificado expirar — basta renovar e instalar o novo.
Posso monitorar múltiplos domínios a partir de um único script?
Sim. Aqui está um script que verifica todos os seus domínios e mostra os dias restantes:
#!/bin/bash
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
days_left=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "WARNING $domain: $days_left days left"
else
echo "OK $domain: $days_left days left"
fi
done
Nota: A sintaxe date -d é específica do Linux. No macOS, use date -j -f "%b %d %H:%M:%S %Y %Z".