Certificados HTTPS gratuitos com o Let's Encrypt
O Let's Encrypt é uma autoridade de certificação que emite certificados HTTPS gratuitos para o seu domínio. No seu VPS, pode obter um certificado com alguns comandos usando o Certbot, ou sem nenhum comando usando o Caddy, e ambos o renovam sozinhos. Há dois requisitos: o domínio tem de apontar para o endereço IP do seu servidor, e as portas 80 e 443 têm de estar abertas a partir do exterior.
Porque precisa de HTTPS?
O HTTPS cifra o tráfego entre o navegador e o servidor. Terceiros na rede não conseguem ler a palavra-passe de um formulário de início de sessão nem os dados de uma encomenda. Os navegadores podem mostrar um aviso de «não seguro» em sites sem HTTPS. Um certificado do Let's Encrypt é gratuito, por isso já não há bom motivo para dispensar o HTTPS.
Antes de começar
- O registo A do domínio tem de mostrar o endereço IP do seu servidor. Para verificar, execute
dig +short example.com. O resultado deve ser o endereço IP do seu servidor. - As portas 80 e 443 têm de estar abertas, porque a validação é feita na porta 80 (HTTP-01). Se usa o ufw, execute
sudo ufw allow 80/tcpesudo ufw allow 443/tcp. Se o seu servidor tem uma firewall separada no painel, verifique também lá as regras. - Se o domínio tem um registo AAAA (IPv6), este também tem de apontar para este servidor. Se não apontar, apague o registo.
- O seu servidor web tem de estar a correr e conhecer este domínio.
Instalar e verificar com o Certbot no Nginx ou no Apache
As instruções oficiais do Certbot recomendam o pacote snap. Confirme que o snapd está instalado no servidor (no Ubuntu costuma estar) e remova qualquer Certbot mais antigo instalado com o apt.
- Instale o Certbot:
sudo snap install --classic certbot - Torne o comando disponível em todo o lado:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - Obtenha o certificado e instale-o no servidor web. Execute
sudo certbot --nginxpara o Nginx ousudo certbot --apachepara o Apache. - Responda às perguntas: o seu endereço de e-mail, para que domínios quer o certificado e se quer redirecionar o HTTP para o HTTPS.
- Experimente a renovação:
sudo certbot renew --dry-run
Se só quer obter o certificado e configurar o resto por si, execute sudo certbot certonly --nginx. O pacote do Certbot acrescenta por si uma tarefa agendada (cron ou um temporizador do systemd), que pode ver no resultado de systemctl list-timers. O sudo certbot certificates lista os seus certificados e as datas de expiração. O Certbot renova um certificado quando a sua validade está a acabar, e não precisa de fazer nada. A renovação ainda pode falhar um dia (por exemplo, por causa de uma regra da firewall), por isso execute o --dry-run de vez em quando.
Para verificar o certificado, olhe primeiro para o ícone do cadeado na barra de endereços do navegador. Para ver a data de expiração com um comando, execute:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
A linha notAfter do resultado é a data de expiração do certificado. Se não usar o redirecionamento que o Certbot adiciona, redirecione por si o HTTP para o HTTPS. No Nginx, adicione a linha return 301 https://$host$request_uri; ao bloco server que escuta na porta 80.
Com o Caddy e sem comandos
Se usa o Caddy, não precisa de instalar nada extra. Para um domínio na sua configuração, o Caddy obtém o certificado do Let's Encrypt ou da ZeroSSL, renova-o e redireciona o HTTP para o HTTPS. Segundo a documentação oficial, os registos A e AAAA do domínio têm de apontar para o servidor, as portas 80 e 443 têm de estar acessíveis do exterior e a pasta de dados do Caddy tem de ser persistente e com permissão de escrita. Se executar o Caddy em Docker, monte essa pasta num volume. Caso contrário, os certificados desaparecem quando o contentor é apagado, e pedi-los de novo pode esbarrar num limite de pedidos.
Certificados wildcard
Um certificado wildcard (*.example.com) cobre todos os subdomínios com um só certificado, e só se obtém com a validação DNS-01. Esta validação não usa a porta 80. Pede que ponha um registo TXT no DNS do seu domínio. Para isso, o seu fornecedor de DNS precisa de uma API, e a chave da API fica guardada no servidor. A documentação do Let's Encrypt considera arriscado guardar essas chaves num servidor web. Se não precisa de um wildcard, obter certificados para domínios individuais com o HTTP-01 é mais simples e não obriga a guardar uma chave de DNS.
Erros comuns
| Sintoma | Causa provável | Solução |
|---|---|---|
| A validação falha, domínio não encontrado | O registo A aponta para o IP errado ou ainda não se propagou | Verifique o IP com dig +short example.com e espere |
| Timeout | A porta 80 está fechada | Abra a 80 no ufw e na firewall do painel, se tiver uma |
| A validação passa umas vezes e falha outras | O registo AAAA aponta para outro servidor | Corrija ou apague o registo AAAA |
| Erro de limite de pedidos | Demasiadas tentativas | Use --dry-run nos testes e consulte a página oficial para ver os limites |
| A renovação não corre | Não há tarefa agendada, ou o servidor web bloqueia a porta 80 | O sudo certbot renew --dry-run mostra o erro |
A mensagem de erro costuma dizer que validação falhou e que endereço o Let's Encrypt tentou alcançar no seu servidor. Leia a mensagem tal como está. A resposta está muitas vezes ali mesmo.
Segundo a página oficial do Let's Encrypt, há um limite de 5 certificados por semana para o mesmo conjunto de nomes de domínio e de 5 validações falhadas por hora para o mesmo nome de domínio. Por isso, use o --dry-run enquanto experimenta. Tenta a renovação no ambiente de teste e não gasta o seu limite real.
Nas aplicações prontas da Seturack
As aplicações prontas (WordPress, Nextcloud e outras) abrem por HTTPS num endereço sslip.io derivado do seu endereço IP, por isso não é preciso nenhum nome de domínio. Quando liga o seu próprio domínio, o Caddy obtém de novo o certificado e não instala nada extra. Os passos para informar o Caddy e a aplicação sobre o domínio estão neste artigo de ajuda.
Comentários0
Ainda não existem comentários
Seja a primeira pessoa a partilhar a sua opinião.
Inicie sessão ou crie uma conta para deixar um comentário.