Por que SSL é obrigatório
HTTPS não é mais opcional. Navegadores modernos marcam sites HTTP como "não seguro", o Google penaliza sites sem HTTPS no ranking de busca, e usuários estão progressivamente mais atentos a indicadores de segurança. Para órgãos públicos, HTTPS é obrigatório por política de segurança do governo federal.
O Let's Encrypt eliminou a última justificativa para não usar HTTPS: o custo. Certificados gratuitos, válidos, aceitos por todos os navegadores e com renovação automática.
Let's Encrypt
O Let's Encrypt é uma autoridade certificadora (CA) gratuita e automatizada, mantida pela Internet Security Research Group (ISRG). Os certificados são:
- 100% gratuitos — sem custo por domínio ou por renovação
- Válidos por 90 dias (renovação automática a cada 60 dias)
- Aceitos por todos os navegadores modernos
- Suportam wildcard (
*.dominio.com.br) via DNS challenge
Instalando com Certbot
O Certbot é o cliente oficial do Let's Encrypt, desenvolvido pela EFF:
# Ubuntu/Debian apt install certbot python3-certbot-nginx # Emitir certificado para domínio com Nginx certbot --nginx -d wsul.net -d www.wsul.net # Ou modo standalone (sem servidor web rodando) certbot certonly --standalone -d meudominio.com.br # Verificar certificados emitidos certbot certificates
Certificado wildcard via DNS challenge
Para certificados que cobrem todos os subdomínios:
# Requer plugin DNS específico do provedor
# Exemplo com Cloudflare
apt install python3-certbot-dns-cloudflare
# Criar arquivo de credenciais
cat > /root/.cloudflare.ini << EOF
dns_cloudflare_api_token = SEU_TOKEN_CLOUDFLARE
EOF
chmod 600 /root/.cloudflare.ini
# Emitir wildcard
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare.ini \
-d wsul.net -d "*.wsul.net"
Configuração Nginx com SSL
# /etc/nginx/sites-available/wsul.net
server {
listen 80;
server_name wsul.net www.wsul.net;
return 301 https://;
}
server {
listen 443 ssl http2;
server_name wsul.net www.wsul.net;
ssl_certificate /etc/letsencrypt/live/wsul.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wsul.net/privkey.pem;
# Configurações SSL seguras
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/wsul.net/chain.pem;
root /var/www/wsul.net;
index index.php index.html;
location / {
try_files / /index.php?;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME ;
}
}
Renovação automática
O Certbot configura automaticamente um timer systemd ou cron job para renovar certificados:
# Verificar timer systemd (Ubuntu 20.04+) systemctl status certbot.timer systemctl list-timers | grep certbot # Testar renovação sem aplicar certbot renew --dry-run # Renovar manualmente se necessário certbot renew --force-renewal
O Certbot renova automaticamente certificados com menos de 30 dias de validade. Com validade de 90 dias e renovação a cada 60, há uma janela de 30 dias de segurança.
Monitorar vencimento
# Verificar vencimento de um certificado
echo | openssl s_client -connect wsul.net:443 2>/dev/null \
| openssl x509 -noout -dates
# Script para alertar certificados vencendo em menos de 30 dias
#!/bin/bash
DOMAIN="wsul.net"
EXPIRY=$(echo | openssl s_client -connect :443 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ( - ) / 86400 ))
if [ -lt 30 ]; then
echo "ALERTA: Certificado de vence em dias" \
| mail -s "SSL vencendo" [email protected]
fi
Configure seu sistema de monitoramento (Zabbix, Grafana, Uptime Kuma) para verificar a validade dos certificados automaticamente. Um certificado vencido derruba o site tão efetivamente quanto uma falha de servidor.