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 com dig +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
Use apenas um método de instalação (apt ou snap). Com os dois, ficam dois agendamentos de renovação mexendo no mesmo diretório /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 certificates lista 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.br e 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 -w do 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-run ou --staging enquanto testa.
  • Erro de OCSP stapling no log do Nginx: o Let's Encrypt desativou o OCSP em 2025. Remova as linhas ssl_stapling da 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

Precisa de ajuda?

Se ficar com alguma dúvida, abra um ticket na área do cliente ou fale com o suporte pelo WhatsApp.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também