Instalar um certificado SSL gratuito com Let's Encrypt e Certbot

Publicado a Atualizado a 5 min de leitura

Certificado SSL gratuito para o seu servidor Linux: veja como instalar o Certbot no Debian e no Ubuntu, emitir um certificado Let's Encrypt para o Apache e deixá-lo renovar-se automaticamente.

Um certificado SSL da Let's Encrypt não custa nada, fica pronto em poucos minutos e é aceite por todos os navegadores correntes. Neste guia vai ativar o HTTPS num servidor Linux próprio com Apache: no Debian 13, Debian 12, Ubuntu 24.04 LTS e Ubuntu 22.04 LTS.

A emissão fica a cargo do Certbot, o cliente ACME oficial da Electronic Frontier Foundation. O Certbot pede o certificado, inscreve-o na configuração do Apache e renova-o depois de forma autónoma através de um timer systemd.

Pré-requisitos

  • Um domínio cujo registo A (e, em IPv6, também o registo AAAA) aponte para o seu vServer ou servidor root.
  • Um servidor web Apache2 em funcionamento, com um VirtualHost para esse domínio.
  • Acesso root através de SSH.
  • A porta 80 e a porta 443 têm de estar acessíveis a partir do exterior. A Let's Encrypt verifica o domínio pela porta 80.

Comece por confirmar que o domínio aponta mesmo para o seu servidor. Para isso, introduza o seu domínio em https://check-host.net/. Se aí aparecer o endereço IP do seu servidor, pode continuar. Se o DNS ainda apontar para um destino antigo, aguarde a atualização, caso contrário a emissão falha.

Atualizar o sistema

Comece por colocar a lista de pacotes e os pacotes instalados no estado mais recente:

apt update && apt upgrade -y

Instalar o Certbot

Existem dois caminhos habituais. O pacote da distribuição é o mais simples e chega perfeitamente para a maioria dos servidores. O pacote Snap traz sempre a versão mais recente do Certbot e é o caminho recomendado oficialmente pela Electronic Frontier Foundation.

Variante 1: Certbot a partir do repositório da distribuição

No Debian e no Ubuntu, o Certbot e o plugin do Apache estão diretamente nas fontes de pacotes:

apt install certbot python3-certbot-apache -y

O pacote "python-certbot-apache", outrora muito divulgado, pertencia ao Python 2 e já não existe. Em todas as versões atuais do Debian e do Ubuntu, o nome de pacote correto é "python3-certbot-apache".

Variante 2: instalar o Certbot através do snap

Se quiser dispor sempre da versão mais recente do Certbot, por exemplo para plugins DNS ou certificados wildcard, instale o Certbot como Snap. Remova antes uma eventual instalação por pacote, para que as duas não se atrapalhem:

apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Emitir o certificado e integrá-lo no Apache

O caminho mais rápido passa pelo plugin do Apache. O Certbot lê os VirtualHosts existentes, pede o certificado e escreve ele próprio a configuração SSL adequada:

certbot --apache -d MeuDominio.pt -d www.MeuDominio.pt

Se preferir manter o controlo sobre a configuração do Apache, pode fazer a verificação do domínio passar pelo diretório webroot. Indique nesse caso exatamente o diretório que o VirtualHost utiliza como DocumentRoot:

certbot --authenticator webroot --installer apache -w /var/www/MeuDominio.pt -d MeuDominio.pt -d www.MeuDominio.pt

Se o seu site estiver no diretório predefinido, o comando é o seguinte:

certbot --authenticator webroot --installer apache -w /var/www/html/ -d MeuDominio.pt -d www.MeuDominio.pt

As perguntas do Certbot

No primeiro arranque, o Certbot faz algumas perguntas:

  • Endereço de e-mail: indique um endereço que leia mesmo. É por aí que a Let's Encrypt envia o aviso quando uma renovação não acontece.
  • Condições de utilização: com "A" está a aceitá-las.
  • Newsletter da Electronic Frontier Foundation: "Y" para sim, "N" para não. É facultativo e não tem qualquer influência sobre o certificado.
  • Redirecionamento para HTTPS: escolha a opção "Redirect", para que o Apache encaminhe automaticamente todos os pedidos HTTP para HTTPS.

De seguida, o Certbot mostra o caminho do certificado. Os ficheiros ficam em /etc/letsencrypt/live/MeuDominio.pt/. Não edite estes ficheiros à mão, eles são reescritos a cada renovação.

Verificar a renovação automática

Um certificado da Let's Encrypt é válido durante 90 dias. O Certbot renova-o automaticamente assim que restarem menos de 30 dias de validade. Para isso, o pacote traz um timer systemd. Verifique se está ativo:

systemctl list-timers certbot.timer

Se o timer não estiver ativo, ative-o:

systemctl enable --now certbot.timer

Teste a seguir o processo em modo de ensaio. Nada é emitido, o Certbot limita-se a simular a renovação:

certbot renew --dry-run

Para que o Apache utilize mesmo o novo certificado depois de uma renovação, registe uma única vez um deploy-hook:

certbot renew --deploy-hook "systemctl reload apache2"

Ver e remover certificados

Uma visão geral de todos os certificados geridos no servidor obtém-se assim:

certbot certificates

Um certificado de que já não precisa remove-se desta forma, para que o Certbot não continue a tentar renová-lo:

certbot delete --cert-name MeuDominio.pt

Erros frequentes

  • "Could not bind to port 80": outro serviço está a ocupar a porta 80. Pare-o ou utilize o método webroot, que trabalha com o Apache já em execução.
  • "Invalid response from http://.../.well-known/acme-challenge/...": o domínio não aponta para este servidor, uma firewall bloqueia a porta 80, ou o diretório webroot indicado não corresponde ao VirtualHost.
  • "The requested apache plugin does not appear to be installed": falta o pacote "python3-certbot-apache".
  • "too many certificates already issued": atingiu um limite da Let's Encrypt. Daqui em diante, teste as configurações com --dry-run antes de pedir um certificado verdadeiro.
  • O navegador continua a mostrar um aviso: limpe a cache do navegador e verifique se o Apache foi recarregado depois da emissão.

Redirecionar HTTP para HTTPS de forma permanente

Se não ativou o redirecionamento durante as perguntas do Certbot, pode acrescentá-lo a qualquer momento. Descrevemos como isso se faz através de um ficheiro .htaccess num artigo dedicado ao redirecionamento de HTTP para HTTPS.

Perguntas frequentes

Quanto custa um certificado SSL da Let's Encrypt?
Nada. A Let's Encrypt é uma autoridade de certificação sem fins lucrativos e emite os certificados gratuitamente. Não existem custos únicos nem custos recorrentes.
Durante quanto tempo é válido um certificado Let's Encrypt?
90 dias. O Certbot renova-o automaticamente assim que restarem menos de 30 dias de validade. O timer systemd responsável por essa tarefa é configurado durante a instalação.
Tenho de renovar o certificado à mão?
Não. Verifique uma única vez com certbot renew --dry-run se a renovação decorre sem problemas. A partir daí, o Certbot trata disso sozinho em segundo plano.
A Let's Encrypt também funciona para subdomínios?
Sim. Basta acrescentar os restantes nomes ao comando através de parâmetros -d adicionais. Um certificado wildcard exige ainda uma verificação por registo DNS e, com ela, um plugin DNS adequado para o Certbot.
Porque é que a verificação do domínio falha?
Em quase todos os casos, o registo A do domínio não aponta para este servidor, ou uma firewall bloqueia a porta 80. A Let's Encrypt não chega então ao servidor e interrompe a emissão.

Lets-Encrypt Certbot Certificado SSL HTTPS Apache Debian Ubuntu