Configuração de certificado SSL: renovação automática com Let's Encrypt e gerenciamento de vários domínios

O e-mail de monitoramento acordou toda a equipe. O site estava fora do ar, e as ligações de usuários reclamando não paravam de chegar ao atendimento. Ao abrir o navegador, apareceu a página vermelha de alerta: “O certificado de segurança deste site expirou”. Pronto, tínhamos um problema sério.
Levantei, conectei ao servidor e descobri que o certificado SSL havia vencido na noite anterior. A renovação manual só terminou às cinco da manhã. Depois de dormir duas horas, já era hora de trabalhar novamente.
Depois disso, fiquei pensando: seria possível eliminar de vez o risco de um certificado expirar? Quando conheci o Let’s Encrypt, percebi que a renovação automática de certificados SSL gratuitos já era uma solução madura. Muitos desenvolvedores, inclusive eu naquela época, ainda estavam presos à antiga rotina de gerenciamento manual.
O objetivo deste artigo é bem claro: impedir que certificados SSL expirem e evitar confusão ao gerenciar vários domínios. Seja para um blog pessoal ou para serviços de uma empresa, você poderá aplicar a configuração diretamente depois da leitura.
O que é o Let’s Encrypt? Primeiro, entenda como ele funciona
Sinceramente, muita gente usa o Let’s Encrypt sem entender como ele funciona. Conhecer o princípio por trás dele ajuda a localizar rapidamente a causa de um problema.
O papel de uma autoridade certificadora (CA)
O Let’s Encrypt é uma autoridade certificadora, também chamada de CA. Sua proposta é clara: ser gratuito, automatizado e aberto. Desde o lançamento, em 2016, ele impulsionou a adoção do HTTPS em poucos anos — hoje são mais de 200 milhões de certificados ativos e 100% de confiança entre os navegadores do mundo.
As CAs tradicionais, como DigiCert e GeoTrust, cobram caro, têm processos trabalhosos e ainda exigem análise manual. O Let’s Encrypt é diferente: tudo é automatizado. Você solicita, ele valida e emite o certificado. A validade é de 90 dias, o que pode parecer pouco, mas, com a renovação automática, torna o processo mais seguro. Por quê? Quanto menor a duração do certificado, menor o período de exposição.
Protocolo ACME: o núcleo da automação
O Let’s Encrypt usa o protocolo ACME (Automated Certificate Management Environment), padronizado pela RFC 8555. Esse protocolo define como validar automaticamente a propriedade de um domínio e como emitir o certificado.
Há três métodos de validação:
- Validação HTTP-01: é a mais comum. A CA acessa um caminho específico no domínio (
/.well-known/acme-challenge/) e verifica se ele contém o token de validação, comprovando que você controla o domínio. - Validação DNS-01: obrigatória para certificados wildcard. A CA verifica se há um token de validação em um registro DNS TXT. Não exige servidor web, mas requer acesso à API do DNS.
- Validação TLS-ALPN-01: menos comum e indicada para cenários específicos.
O HTTP-01 é o método mais simples, desde que a porta 80 esteja acessível. O DNS-01 é mais flexível e funciona bem para serviços internos ou certificados wildcard.
Certbot: o cliente recomendado oficialmente
O Certbot é a ferramenta cliente recomendada oficialmente pelo Let’s Encrypt. Ele cuida de todo o processo: solicita o certificado, configura o servidor web e prepara a renovação automática.
Principais recursos do Certbot:
- Compatibilidade com vários métodos de validação
- Alteração automática da configuração do Nginx/Apache por meio de plugins
- Configuração automática de um systemd timer ou cron job
- Comando para testar a renovação (dry-run)
Depois de entender esses princípios, você saberá onde procurar quando surgir um problema durante a configuração.
Configuração de certificado SSL para um domínio: do zero
Vamos começar pelo cenário mais simples: um domínio e um servidor. Depois de entender o fluxo básico, gerenciar vários domínios fica muito mais natural.
Instalar o Certbot
O método de instalação varia de acordo com o sistema. No Ubuntu/Debian, a opção mais simples é usar o Snap — também é o método recomendado oficialmente e recebe atualizações rapidamente.
Ubuntu/Debian (via Snap):
# Instalar o Snap (se ainda não estiver instalado)
sudo apt update
sudo apt install snapd
# Instalar o Certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
CentOS/RHEL:
sudo yum install certbot
# ou
sudo dnf install certbot
Depois da instalação, faça um teste:
certbot --version
# A saída deve ser parecida com: certbot 2.11.0
Obter o certificado: três métodos
O Certbot oferece três formas de obter um certificado. Escolha conforme a sua necessidade.
Método 1: configuração automática com o plugin do Nginx (recomendado para iniciantes)
É a opção mais prática. O Certbot altera automaticamente a configuração do Nginx, solicita o certificado, configura o HTTPS e prepara o redirecionamento. Tudo com um único comando:
sudo certbot --nginx -d example.com -d www.example.com
Durante a execução, algumas perguntas serão feitas:
- Endereço de e-mail para notificações urgentes
- Aceitação dos termos de serviço
- Se deseja compartilhar o e-mail (escolha No)
- Se deseja redirecionar HTTP para HTTPS (escolha Yes, por ser mais seguro)
Ao terminar, a configuração do Nginx já estará atualizada. Os caminhos do certificado serão exibidos:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
Método 2: configuração automática com o plugin do Apache
Funciona como no Nginx, mas usando o plugin do Apache:
sudo certbot --apache -d example.com -d www.example.com
Método 3: obter apenas o certificado (configuração manual)
Se você não quiser que o Certbot altere a configuração ou usar outro servidor web, como Caddy ou Node.js, pode utilizar o modo certonly:
sudo certbot certonly --webroot \
-w /var/www/html \
-d example.com \
-d www.example.com
O parâmetro -w informa o diretório raiz do site, onde o Certbot colocará o arquivo de validação. Depois de obter o certificado, você configura o servidor web manualmente.
Verificar se o certificado está funcionando
Depois de solicitar o certificado, confirme se ele funciona corretamente.
Verificar os arquivos do certificado
sudo ls -la /etc/letsencrypt/live/example.com/
Você deve encontrar quatro arquivos:
cert.pem: o certificadochain.pem: a cadeia intermediária de certificadosfullchain.pem: a cadeia completa de certificados (use este arquivo no Nginx)privkey.pem: a chave privada (use este arquivo no Nginx)
Teste do SSL Labs
Acesse https://www.ssllabs.com/ssltest/ e informe o domínio. O teste atribui uma nota de A+ a F. O objetivo é alcançar pelo menos A.
Problemas comuns:
- B ou C: versão antiga do TLS ou conjunto de cifras fraco. Mais adiante, veremos como otimizar isso.
- F: cadeia de certificados incompleta. Verifique se o Nginx usa
fullchain.pem, e nãocert.pem.
Acesso pelo navegador
Abra https://example.com. A barra de endereço deve mostrar o ícone de cadeado. Ao clicar nele, você poderá consultar os detalhes do certificado e verá “Let’s Encrypt” como emissor.
Configuração da renovação automática: não se preocupe mais com vencimentos
Os certificados do Let’s Encrypt são válidos por apenas 90 dias. Pode parecer pouco, mas, com a renovação automática, isso se torna uma vantagem: os certificados são trocados com frequência e o período de exposição é menor.
Como funciona a renovação automática do Certbot
Ao instalar o Certbot, ele configura automaticamente um mecanismo de renovação. A forma varia conforme o sistema:
Systemd Timer (Linux moderno):
Depois da instalação, o Certbot cria certbot.timer e certbot.service. O Timer é executado duas vezes por dia e verifica se algum certificado vencerá em até 30 dias. Se for o caso, ele aciona o Service para renovar.
Verifique o estado do Timer:
sudo systemctl list-timers | grep certbot
A saída será parecida com:
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2026-04-02 12:00:00 UTC 1h left Thu 2026-04-02 00:00:00 UTC 11h ago certbot.timer certbot.service
É possível ver os horários da próxima e da última execução.
Cron Job (método tradicional):
Se o sistema não tiver systemd, como em versões antigas do CentOS, o Certbot configura um cron job. Verifique com:
sudo crontab -l
# ou
cat /etc/cron.d/certbot
Configuração típica:
0 0,12 * * * root certbot renew --quiet
A verificação de renovação é executada todos os dias à meia-noite e ao meio-dia.
Verificar se a renovação automática funciona
Não basta ver o Timer ou o Cron. É preciso confirmar que a renovação realmente pode ser executada.
Teste Dry Run
O Certbot oferece um comando de teste que simula o processo sem renovar o certificado de verdade:
sudo certbot renew --dry-run
A saída será parecida com:
Processing /etc/letsencrypt/renewal/example.com.conf
Cert not due for renewal, but simulating renewal for dry run
...
The dry run was successful.
Se aparecer “successful”, a renovação automática está configurada corretamente.
Verificar o arquivo de configuração da renovação
Cada certificado tem seu próprio arquivo de configuração de renovação:
cat /etc/letsencrypt/renewal/example.com.conf
Esse arquivo registra os parâmetros usados na solicitação do certificado e o método de validação. A configuração será lida durante a renovação.
Recarregar automaticamente o servidor web depois da renovação
Depois que o certificado é renovado, o servidor web ainda pode estar usando o certificado antigo. É preciso recarregar a configuração para ativar o novo arquivo.
Deploy Hook (recomendado)
Execute automaticamente um comando após uma renovação bem-sucedida:
sudo certbot renew --deploy-hook "systemctl reload nginx"
Ou adicione ao arquivo de configuração da renovação:
# Editar /etc/letsencrypt/renewal/example.com.conf
# Adicionar ao final:
deploy_hook = systemctl reload nginx
Post Hook (executado sempre)
É executado independentemente de a renovação ter sido bem-sucedida:
sudo certbot renew --post-hook "systemctl reload nginx"
A diferença é que o Deploy Hook só é acionado após uma renovação bem-sucedida, enquanto o Post Hook é executado sempre. O Deploy Hook costuma ser a escolha mais adequada.
O que fazer quando a renovação falha?
A renovação automática não é infalível e pode falhar ocasionalmente. Veja as causas mais comuns e como resolvê-las.
Problema de resolução DNS
O DNS do domínio foi alterado, mas a CA ainda encontra o IP antigo durante a validação. Aguarde a propagação do DNS, de acordo com o TTL, ou force a renovação manual:
sudo certbot renew --force-renewal
Problema de firewall ou porta
A validação HTTP-01 exige que a porta 80 esteja acessível. Verifique o firewall:
sudo ufw status
sudo iptables -L -n
Libere temporariamente a porta 80:
sudo ufw allow 80/tcp
Problema de permissão
Verifique se as permissões dos arquivos do certificado estão corretas:
sudo ls -la /etc/letsencrypt/live/
sudo ls -la /etc/letsencrypt/archive/
Garanta que o usuário do servidor web, como www-data, consiga ler o certificado.
Consultar o log de renovação
Quando houver uma falha, consulte o log detalhado:
sudo tail -f /var/log/letsencrypt/letsencrypt.log
O log registra a causa da falha. Resolva o problema conforme a mensagem apresentada.
Gerenciamento de certificados SSL para vários domínios: estratégias centralizadas e separadas
Quando há vários domínios, a estratégia de gerenciamento dos certificados é importante. Sem organização, tudo vira uma confusão: datas de renovação diferentes, arquivos espalhados e configurações sujeitas a erros.
Um certificado para vários domínios (modo SAN)
A abordagem mais recomendada é incluir vários domínios em um único certificado. Basta informar todos eles ao solicitar com o Certbot:
sudo certbot --nginx \
-d example.com \
-d www.example.com \
-d api.example.com \
-d admin.example.com
Vantagens:
- Renovação unificada: uma única renovação atualiza todos os domínios
- Arquivos centralizados: há apenas um diretório de certificado
- Configuração simples: o servidor web precisa referenciar apenas um caminho de certificado
Extensão SAN (Subject Alternative Names): é um campo do certificado que lista todos os domínios incluídos. O navegador verifica se o domínio acessado está na lista SAN.
Veja quais domínios estão incluídos no certificado:
sudo certbot certificates
A saída será parecida com:
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com api.example.com admin.example.com
Expiry Date: 2026-07-01 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Certificado wildcard
Um certificado wildcard usa um curinga para cobrir todos os subdomínios: *.example.com. Um único certificado cobre blog.example.com, api.example.com, admin.example.com e outros.
A validação DNS-01 é obrigatória: o HTTP-01 não oferece suporte a certificados wildcard. O Certbot precisa acessar a API do DNS para adicionar o registro TXT.
Configurar o plugin de DNS
Cada provedor de DNS usa um plugin diferente. O Cloudflare é um dos mais comuns:
# Instalar o plugin do Cloudflare
sudo snap install certbot-dns-cloudflare
# Criar o arquivo de credenciais
sudo nano /root/.secrets/certbot/cloudflare.ini
Conteúdo do arquivo de credenciais:
dns_cloudflare_api_token = your_cloudflare_api_token
Gere o API Token no painel do Cloudflare e atribua a permissão “DNS:Edit”.
Solicitar o certificado wildcard
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini \
-d "*.example.com" \
-d example.com
Observação: solicite *.example.com e example.com juntos. O wildcard não cobre o domínio raiz.
Limitações do certificado wildcard
Cobre apenas subdomínios de primeiro nível: *.example.com cobre sub.example.com, mas não cobre sub.sub.example.com.
Se houver subdomínios de segundo nível, solicite-os separadamente:
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini \
-d "*.example.com" \
-d "*.api.example.com" \
-d example.com
Assim, o certificado cobre api.example.com e v1.api.example.com.
Estratégias para gerenciar vários certificados
Quando usar um único certificado para vários domínios? Quando usar vários certificados?
Agrupar por serviço (recomendado)
Grupo de serviços web: site principal, blog e documentação
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com -d docs.example.com
Grupo de serviços de API: endpoints de API e painel administrativo
sudo certbot --nginx -d api.example.com -d admin.example.com -d v1.api.example.com
Grupo de serviços internos: monitoramento, logs e ferramentas internas
sudo certbot certonly --dns-cloudflare -d "*.internal.example.com"
Vantagens:
- Escopo controlado da renovação: renovar o serviço de API não afeta o serviço web
- Isolamento de permissões: as permissões dos certificados de serviços internos podem ser gerenciadas separadamente
- Isolamento de falhas: um problema em um certificado não afeta os outros serviços
Agrupar por nível de domínio
Combine certificados wildcard e de domínio único:
# O wildcard cobre todos os subdomínios
sudo certbot certonly --dns-cloudflare -d "*.example.com" -d example.com
# Certificado separado para um subdomínio especial (quando precisar de configuração específica)
sudo certbot --nginx -d secure.example.com
Entenda os caminhos dos arquivos de certificado
Compreender a estrutura dos diretórios evita confusão ao gerenciar vários certificados.
Diretório dos certificados em uso: /etc/letsencrypt/live/[nome-do-certificado]/
Os links simbólicos apontam para o certificado mais recente. A cada renovação, os links são atualizados para os novos arquivos.
sudo ls -la /etc/letsencrypt/live/example.com/
lrwxrwxrwx 1 root root 42 Apr 2 12:00 cert.pem -> ../../archive/example.com/cert2.pem
lrwxrwxrwx 1 root root 43 Apr 2 12:00 chain.pem -> ../../archive/example.com/chain2.pem
lrwxrwxrwx 1 root root 44 Apr 2 12:00 fullchain.pem -> ../../archive/example.com/fullchain2.pem
lrwxrwxrwx 1 root root 40 Apr 2 12:00 privkey.pem -> ../../archive/example.com/privkey2.pem
Diretório de arquivamento dos certificados: /etc/letsencrypt/archive/[nome-do-certificado]/
Ele guarda o histórico dos certificados de cada renovação. Os nomes dos arquivos incluem um número, como cert1.pem e cert2.pem.
Diretório de configuração da renovação: /etc/letsencrypt/renewal/[nome-do-certificado].conf
Registra os parâmetros usados na solicitação do certificado. Esse arquivo é lido durante a renovação.
# Ver a configuração de renovação de um certificado
cat /etc/letsencrypt/renewal/example.com.conf
A configuração inclui:
- Método de validação (webroot, nginx ou dns-cloudflare)
- Lista original de domínios
- Deploy Hook e outros parâmetros
Configuração avançada e otimização: equilibrando segurança e desempenho
Depois de concluir a configuração básica, você pode fazer outras otimizações. O objetivo é equilibrar segurança e desempenho.
HTTP/2 e OCSP Stapling
O HTTP/2 melhora o desempenho, enquanto o OCSP Stapling reduz a latência da validação.
Configurar HTTP/2 no Nginx
server {
listen 443 ssl http2; # Adicionar http2
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# ... Outras configurações
}
Adicione http2 depois da diretiva listen. Em seguida, recarregue o Nginx:
sudo nginx -t
sudo systemctl reload nginx
Configurar OCSP Stapling
O OCSP (Online Certificate Status Protocol) verifica o estado do certificado. Com Stapling, o servidor obtém antecipadamente o resultado da validação, e o cliente não precisa consultar a CA separadamente.
server {
# ... Configuração SSL
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
}
Depois da configuração, o teste do SSL Labs mostrará “OCSP Stapling: Yes”.
Reforço de segurança: desative versões antigas do TLS
TLS 1.0 e 1.1 já não são seguros. Desde 2020, os principais navegadores deixaram de oferecer suporte a eles.
server {
# Manter apenas TLS 1.2 e 1.3
ssl_protocols TLSv1.2 TLSv1.3;
# Conjunto de cifras recomendado (equilíbrio entre segurança e compatibilidade)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# Cache de sessão SSL (melhora o desempenho)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}
Depois da configuração, o teste do SSL Labs deve alcançar A ou A+.
Configurar o cabeçalho HSTS
O HSTS (HTTP Strict Transport Security) obriga o navegador a acessar o site apenas por HTTPS. Depois de configurado, o navegador memoriza que o domínio deve usar HTTPS e, mesmo que o usuário digite http://, faz o redirecionamento automaticamente.
server {
# ... Configuração SSL
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
Significado dos parâmetros:
max-age=31536000: validade de um ano, em segundosincludeSubDomains: inclui todos os subdomíniospreload: permite incluir o domínio na lista de pré-carregamento dos navegadores
Atenção: depois de configurar o HSTS, o navegador pode recusar o acesso se você precisar usar HTTP temporariamente, por exemplo, em um teste. Use com cuidado.
Monitoramento e alertas: descubra problemas com antecedência
A renovação automática não é infalível. Se ela falhar, você precisa saber antes que o certificado expire. Um alerta com uma semana de antecedência dá tempo para resolver o problema manualmente.
Script simples de monitoramento
Crie um script para verificar quantos dias restam até o vencimento do certificado:
#!/bin/bash
# /usr/local/bin/check-ssl-expiry.sh
DOMAIN="example.com"
EXPIRY_DAYS=$(openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_DATE=$(date -d "$EXPIRY_DAYS" +%s)
CURRENT_DATE=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_DATE - $CURRENT_DATE) / 86400 ))
if [ $DAYS_LEFT -lt 7 ]; then
echo "WARNING: SSL certificate for $DOMAIN expires in $DAYS_LEFT days"
# Enviar um alerta por e-mail (é preciso configurar o serviço de e-mail)
mail -s "SSL Certificate Expiry Warning" [email protected] <<< "SSL certificate for $DOMAIN expires in $DAYS_LEFT days"
fi
Adicione ao cron para executar a verificação diariamente:
0 6 * * * /usr/local/bin/check-ssl-expiry.sh
Notificações automáticas do Certbot
Quando uma renovação falha, o Certbot envia uma mensagem para o e-mail usado na solicitação do certificado. Verifique se o endereço está correto e se você consegue receber as mensagens.
Problemas comuns e soluções
Vários problemas podem surgir durante a configuração. Veja a seguir os erros mais frequentes e como resolvê-los.
Falha ao solicitar o certificado
Causa 1: o DNS do domínio não aponta para o servidor
Ao solicitar o certificado, a CA precisa validar a propriedade do domínio. A validação HTTP-01 exige acesso ao domínio. Se o DNS ainda não estiver configurado, a validação falhará.
Verificar o DNS:
dig example.com +short
# ou
nslookup example.com
Confirme se o IP retornado é o IP do servidor.
Solução: aguarde a propagação do DNS. Tente novamente após o TTL, que normalmente varia de alguns minutos a algumas horas.
Causa 2: a porta 80 está ocupada ou bloqueada pelo firewall
A validação HTTP-01 usa a porta 80. Se outro processo estiver ocupando a porta ou se o firewall bloquear o acesso, a validação falhará.
Verificar o uso da porta:
sudo netstat -tulpn | grep :80
sudo lsof -i :80
Se a porta não estiver sendo usada pelo Nginx/Apache, interrompa o processo responsável:
sudo systemctl stop nome-do-serviço
Verificar o firewall:
sudo ufw status
# ou
sudo iptables -L -n
Libere as portas 80 e 443:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Causa 3: problema de permissão no diretório webroot
Ao usar certonly --webroot, o Certbot precisa criar o arquivo de validação no diretório raiz do site. Se não houver permissão suficiente, a operação falhará.
Verificar as permissões do diretório:
ls -la /var/www/html/.well-known/
Garanta que o usuário do Certbot, normalmente root, possa gravar no diretório.
Criar o diretório manualmente:
sudo mkdir -p /var/www/html/.well-known/acme-challenge
sudo chown -R www-data:www-data /var/www/html/.well-known
Como lidar com falhas na renovação
A renovação automática pode falhar de vez em quando. Não entre em pânico: primeiro consulte o log e depois corrija a causa específica.
Consultar o log do Certbot
sudo tail -100 /var/log/letsencrypt/letsencrypt.log
O log mostrará a causa da falha. Erros comuns:
Connection refused: problema de portaDNS problem: NXDOMAIN: problema de resolução DNSRate limit exceeded: limite de solicitações excedido
Forçar a renovação manual
Se a renovação automática falhar, renove manualmente:
sudo certbot renew --force-renewal
--force-renewal força a renovação, mesmo quando o certificado ainda não está próximo do vencimento.
Verificar a configuração da renovação
Um arquivo de configuração de renovação corrompido também pode causar falhas. Verifique-o:
cat /etc/letsencrypt/renewal/example.com.conf
Confirme se a configuração está correta. Se estiver corrompida, exclua o certificado e solicite outro:
sudo certbot delete --cert-name example.com
sudo certbot --nginx -d example.com -d www.example.com
Conflito entre vários certificados
Quando há vários certificados, o servidor web pode apontar para o arquivo errado.
Caminho incorreto do certificado no Nginx
Verifique a configuração do Nginx:
sudo nginx -T | grep ssl_certificate
Confirme se cada server block usa o caminho correto do certificado.
Erros comuns:
- Usar
cert.pemem vez defullchain.pem, deixando a cadeia de certificados incompleta - Referenciar o diretório de certificado errado, quando o nome do certificado não coincide com o domínio
Nome do certificado diferente do domínio
O Certbot usa o primeiro domínio como nome do certificado. Por exemplo:
sudo certbot --nginx -d api.example.com -d example.com
O nome do certificado será api.example.com, e o caminho será /etc/letsencrypt/live/api.example.com/.
Se a configuração do Nginx apontar para /etc/letsencrypt/live/example.com/, o certificado não será encontrado.
Ver o nome do certificado:
sudo certbot certificates
Confirme se o nome e o caminho do certificado correspondem.
Limitações dos certificados wildcard
Os certificados wildcard são práticos, mas têm limitações.
Cobrem apenas subdomínios de primeiro nível
*.example.com cobre sub.example.com, mas não cobre sub.sub.example.com.
Se houver subdomínios de segundo nível, será preciso obter outro certificado:
# Certificado wildcard (primeiro nível)
sudo certbot certonly --dns-cloudflare -d "*.example.com" -d example.com
# Certificado para subdomínios de segundo nível
sudo certbot certonly --dns-cloudflare -d "*.api.example.com"
Não cobrem o domínio raiz
*.example.com não cobre example.com, o domínio raiz. É obrigatório adicionar -d example.com separadamente.
Exemplo incorreto:
# Incorreto: o domínio raiz não estará acessível
sudo certbot certonly --dns-cloudflare -d "*.example.com"
Exemplo correto:
# Correto: inclui também o domínio raiz
sudo certbot certonly --dns-cloudflare -d "*.example.com" -d example.com
Conclusão: a evolução do processo manual para o automático
Configurar certificados SSL é, na prática, uma evolução do trabalho manual para a automação. O processo manual das CAs tradicionais se torna simples e confiável com o sistema automatizado do Let’s Encrypt.
Resumo dos pontos principais:
- Entenda o princípio: o protocolo ACME define o fluxo automático de validação e emissão. HTTP-01 e DNS-01 são dois métodos de validação, cada um adequado a cenários diferentes.
- Renovação automática: depois de instalado, o Certbot configura automaticamente um systemd timer ou cron job. A renovação é acionada 30 dias antes do vencimento, com duas verificações por dia.
- Gerenciamento de vários domínios: o modo SAN, com vários domínios em um certificado, facilita o gerenciamento unificado; certificados wildcard são indicados para muitos subdomínios. Agrupar certificados por serviço é a estratégia recomendada.
- Otimização de segurança: HTTP/2, OCSP Stapling, desativação de versões antigas do TLS e HSTS ajudam a alcançar a nota A+ no SSL Labs.
- Monitoramento e alertas: a renovação automática não é infalível. Monitore proativamente os dias restantes do certificado para identificar problemas com antecedência.
Próximos passos de otimização:
Se você gerencia vários servidores e muitos domínios, considere:
- Plataformas de automação: como Cert Manager para Kubernetes e Traefik com SSL automático
- Serviços de monitoramento de certificados: como SSL Monitor e Uptime Robot
- Integração com CI/CD: verifique automaticamente o estado do certificado durante a implantação
Depois de automatizar o gerenciamento dos certificados, você não precisa mais se preocupar com isso. O site fica seguro, ganha a confiança dos usuários e agrada aos mecanismos de busca. Os alertas às três da manhã finalmente ficam no passado.
Configurar a renovação automática de certificados SSL do Let's Encrypt
Fluxo completo de configuração de certificados SSL, desde a instalação do Certbot até a renovação automática, para manter o HTTPS do site sempre válido
⏱️ Estimated time: 30 min
- 1
Step 1: Instalar o Certbot
Escolha o método de instalação de acordo com o sistema:
• Ubuntu/Debian (recomendado): sudo snap install --classic certbot
• CentOS/RHEL: sudo yum install certbot
• Testar a instalação: certbot --version - 2
Step 2: Solicitar o certificado SSL
Escolha o método de solicitação adequado:
• Configuração automática no Nginx: sudo certbot --nginx -d example.com -d www.example.com
• Configuração automática no Apache: sudo certbot --apache -d example.com -d www.example.com
• Obter apenas o certificado: sudo certbot certonly --webroot -w /var/www/html -d example.com - 3
Step 3: Validar a renovação automática
Verifique se o Certbot configurou automaticamente o mecanismo de renovação:
• Systemd Timer: sudo systemctl list-timers | grep certbot
• Teste Dry Run: sudo certbot renew --dry-run
• Confirme que a saída contém "successful" - 4
Step 4: Configurar o recarregamento automático após a renovação
Adicione um Deploy Hook ao arquivo de configuração de renovação:
• Editar o arquivo: sudo nano /etc/letsencrypt/renewal/example.com.conf
• Adicionar a configuração: deploy_hook = systemctl reload nginx
• Ou usar a linha de comando: sudo certbot renew --deploy-hook "systemctl reload nginx" - 5
Step 5: Reforçar a segurança
Adicione otimizações de segurança à configuração do Nginx:
• Desativar TLS antigo: ssl_protocols TLSv1.2 TLSv1.3;
• Ativar HTTP/2: listen 443 ssl http2;
• OCSP Stapling: ssl_stapling on;
• Cabeçalho HSTS: add_header Strict-Transport-Security "max-age=31536000" always; - 6
Step 6: Configurar monitoramento e alertas
Crie um script para monitorar o vencimento do certificado:
• Criar o script: sudo nano /usr/local/bin/check-ssl-expiry.sh
• Adicionar ao Cron: 0 6 * * * /usr/local/bin/check-ssl-expiry.sh
• Garanta que as notificações por e-mail do Certbot estejam funcionando
FAQ
Por que os certificados do Let's Encrypt são válidos por apenas 90 dias?
Qual é a diferença entre os métodos de validação HTTP-01 e DNS-01?
DNS-01: a CA verifica um registro DNS TXT. Exige acesso à API do DNS, é obrigatório para certificados wildcard e é adequado para serviços internos ou um grande número de subdomínios.
Quais domínios um certificado wildcard *.example.com pode cobrir?
Não cobre:
• Subdomínios de segundo nível: sub.sub.example.com (é preciso solicitar *.sub.example.com separadamente)
• Domínio raiz: example.com (é preciso adicionar -d example.com separadamente)
Quando a renovação automática do Certbot é acionada?
Como corrigir uma nota B ou C no teste do SSL Labs?
• Versão de TLS antiga: configure ssl_protocols TLSv1.2 TLSv1.3; no Nginx
• Conjunto de cifras fraco: use o conjunto recomendado na seção seis deste artigo
• Cadeia de certificados incompleta: use fullchain.pem em vez de cert.pem
• Falta de OCSP Stapling: adicione ssl_stapling on;
Depois, recarregue o Nginx e repita o teste. A nota deve chegar a A ou A+.
Para vários domínios, é melhor usar um único certificado ou vários?
• Um certificado com vários domínios (modo SAN): adequado para domínios relacionados, com renovação unificada e configuração simples. Exemplo de grupo web: example.com, www.example.com e blog.example.com
• Vários certificados por grupo: adequado para serviços diferentes, com isolamento de falhas e separação de permissões. Por exemplo, gerencie separadamente serviços web, APIs e serviços internos
• Certificado wildcard: adequado para muitos subdomínios e reduz a quantidade de certificados. Por exemplo, *.example.com cobre todos os subdomínios de primeiro nível
O que fazer quando a renovação do certificado falha?
Causas comuns:
• Problema de DNS: aguarde a propagação do DNS ou renove manualmente com --force-renewal
• Porta ocupada: verifique a porta 80 e interrompa temporariamente o serviço que a utiliza
• Bloqueio pelo firewall: libere as portas 80/443
• Problema de permissão: verifique as permissões dos arquivos do certificado
Depois de corrigir o problema, renove manualmente: sudo certbot renew --force-renewal
19 min de leitura · Publicado em: 2 abr 2026 · Atualizado em: 4 set 2026
Operação e segurança de servidores Linux
Se você chegou pela busca, o caminho mais rápido é ir para o post anterior ou próximo desta série.



Comentários
Entre com GitHub para comentar