Instale certificado SSL gratuito do Let's Encrypt com Certbot no Nginx ou Apache, inclusive wildcard, e garanta a renovação automática.
Para que serve
O Let's Encrypt emite certificado SSL gratuito (tecnicamente, TLS) aceito por todos os navegadores. O Certbot é o cliente que pede o certificado, prova que você controla o domínio, configura o Nginx ou o Apache e renova tudo sozinho antes de vencer. Este artigo cobre a instalação em Debian 13 ou Ubuntu 24.04 sem painel de controle. Se você usa cPanel, Plesk, CloudPanel ou Virtualmin, prefira o recurso de SSL do próprio painel.
Pré-requisitos
- Nginx ou Apache já servindo o site em HTTP (porta 80).
- Registros DNS A/AAAA do domínio (e do
www, se usar) apontando para o IP do servidor. Confira comdig +short exemplo.com.br. - Porta 80 liberada para a internet: a validação HTTP-01 sempre começa pela porta 80, mesmo que o site use só HTTPS depois.
- Se houver um registro AAAA, o site também precisa responder por IPv6. O Let's Encrypt prefere IPv6 quando ele existe, e um AAAA quebrado faz a validação falhar.
Passo a passo: certificado SSL gratuito com Certbot
1. Instale o Certbot
No Debian e no Ubuntu o pacote do repositório é suficiente e já traz o timer de renovação:
# Nginx
apt update && apt install -y certbot python3-certbot-nginx
# Apache
apt update && apt install -y certbot python3-certbot-apache
/etc/letsencrypt, o que gera falhas difíceis de rastrear. Se for trocar para o snap, remova antes o pacote apt.2. Emita o certificado
# Nginx
certbot --nginx -d exemplo.com.br -d www.exemplo.com.br
# Apache
certbot --apache -d exemplo.com.br -d www.exemplo.com.br
Na primeira vez, o Certbot pede um e-mail e a aceitação dos termos. Ele encontra o server block com o server_name correspondente, adiciona as diretivas de certificado e cria o redirecionamento de HTTP para HTTPS.
Prefere editar a configuração você mesmo? Use o modo webroot, que só grava um arquivo em /.well-known/acme-challenge/ e emite o certificado:
certbot certonly --webroot -w /srv/exemplo/public -d exemplo.com.br -d www.exemplo.com.br \
--deploy-hook "systemctl reload nginx"
Depois aponte no server block:
ssl_certificate /etc/letsencrypt/live/exemplo.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemplo.com.br/privkey.pem;
3. Certificado wildcard (*.exemplo.com.br)
Curingas só podem ser validados por DNS (desafio DNS-01): o Certbot pede que você crie um registro TXT _acme-challenge. Feito à mão, você teria de repetir isso a cada renovação; por isso use um plugin do seu provedor de DNS. Exemplo com Cloudflare:
apt install -y python3-certbot-dns-cloudflare
mkdir -p /root/.secrets
echo "dns_cloudflare_api_token = SEU_TOKEN" > /root/.secrets/cloudflare.ini
chmod 600 /root/.secrets/cloudflare.ini
certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
-d exemplo.com.br -d '*.exemplo.com.br' --deploy-hook "systemctl reload nginx"
Crie o token na Cloudflare com permissão apenas de Zone > DNS > Edit na zona do domínio.
4. Confira a renovação automática
O pacote cria o timer certbot.timer, que roda duas vezes por dia e renova o que estiver perto do vencimento:
systemctl list-timers | grep certbot
certbot renew --dry-run
O --dry-run simula a renovação contra o ambiente de testes do Let's Encrypt, sem gastar limite. Se passar, a renovação real também deve passar.
No plugin --nginx/--apache, o Certbot recarrega o servidor sozinho após renovar. Nos modos webroot e DNS, é o --deploy-hook que faz isso; ele fica salvo em /etc/letsencrypt/renewal/exemplo.com.br.conf.
Validade dos certificados está diminuindo
Hoje os certificados valem 90 dias. Por exigência das regras do setor (CA/Browser Forum), o Let's Encrypt vai reduzir para 64 dias em fevereiro de 2027 e para 45 dias em fevereiro de 2028. Com o timer funcionando, nada muda para você. Se você copia certificados manualmente para outros equipamentos (firewall, balanceador, appliance), automatize isso agora, com um deploy hook por exemplo.
Como saber se funcionou
certbot certificateslista os certificados, os domínios e a data de vencimento.- Do seu computador:
curl -vI https://exemplo.com.br 2>&1 | grep -E "expire|issuer"mostra o emissor (Let's Encrypt) e a validade. - Acesse
http://exemplo.com.bre confirme o redirecionamento para HTTPS.
Ter o certificado não basta para uma boa nota em testes de segurança: veja também o artigo «Como desabilitar TLS 1.0 e 1.1 e tirar nota A no SSL Labs (Nginx, Apache e Windows Server)».
Problemas comuns
- "Timeout during connect" ou "Connection refused": a porta 80 está bloqueada no firewall, ou o DNS ainda não aponta para o servidor. Teste de fora com
curl -I http://exemplo.com.br/.well-known/acme-challenge/teste; um 404 do seu Nginx significa que o caminho está aberto. - "Invalid response ... 404": o arquivo do desafio foi gravado num diretório diferente do que o site serve. Confira o
-wdo webroot ou se outro server block está pegando a requisição. - Site atrás da Cloudflare com proxy ativo: a validação HTTP normalmente passa, mas uma regra de "Sempre usar HTTPS" mal configurada pode causar loops. Para esse cenário, o certificado de origem da própria Cloudflare ou o desafio DNS são alternativas.
- "too many certificates already issued": você atingiu um limite de emissão (por exemplo, 5 certificados idênticos por semana). Aguarde e use
--dry-runou--stagingenquanto testa. - Erro de OCSP stapling no log do Nginx: o Let's Encrypt desativou o OCSP em 2025. Remova as linhas
ssl_staplingda configuração.
Perguntas frequentes
O certificado gratuito do Let's Encrypt é seguro?
Sim. A criptografia é a mesma de um certificado pago. A diferença é que o Let's Encrypt só emite certificados de validação de domínio (DV), sem os dados da empresa no certificado.
Quanto tempo dura o certificado do Let's Encrypt?
Hoje, 90 dias. O certbot.timer renova automaticamente quando faltam cerca de 30 dias. A validade vai cair para 64 dias em fevereiro de 2027 e para 45 dias em fevereiro de 2028.
Como renovar o certificado manualmente?
Rode certbot renew. Antes, teste com certbot renew --dry-run, que não gasta limite de emissão.
Dá para gerar um certificado wildcard gratuito?
Sim, mas só pelo desafio DNS-01. Use um plugin do seu provedor de DNS (por exemplo python3-certbot-dns-cloudflare) para a renovação continuar automática.
Posso usar Let's Encrypt com a Cloudflare na frente do site?
Sim. Mantenha o certificado no servidor e use o modo SSL Full (strict) na Cloudflare. Outra opção é o certificado de origem da própria Cloudflare.
Leitura complementar
- Documentação oficial do Certbot
- Limites de emissão do Let's Encrypt
- Tipos de desafio (HTTP-01, DNS-01)
Precisa de ajuda?
Se ficar com alguma dúvida, abra um ticket na área do cliente ou fale com o suporte pelo WhatsApp.
