Certificados HTTPS gratuitos com o Let's Encrypt
O Let's Encrypt é uma autoridade certificadora que emite certificados HTTPS gratuitos para o seu domínio. No seu VPS, você obtém um certificado com poucos comandos usando o Certbot, ou sem nenhum comando usando o Caddy, e os dois o renovam sozinhos. Há dois requisitos: o domínio precisa apontar para o endereço IP do seu servidor e as portas 80 e 443 precisam estar abertas para acesso externo.
Por que você precisa de HTTPS?
O HTTPS criptografa o tráfego entre o navegador e o servidor. Terceiros na rede não conseguem ler a senha de um formulário de login nem os detalhes de um pedido. Os navegadores podem mostrar um aviso de "não seguro" em sites sem HTTPS. Um certificado do Let's Encrypt é gratuito, então não sobra um bom motivo para ficar sem HTTPS.
Antes de começar
- O registro A do domínio precisa mostrar o endereço IP do seu servidor. Para conferir, execute
dig +short example.com. A saída deve ser o endereço IP do seu servidor. - As portas 80 e 443 precisam estar abertas, porque a validação acontece na porta 80 (HTTP-01). Se você usa o ufw, execute
sudo ufw allow 80/tcpesudo ufw allow 443/tcp. Se o seu servidor tem um firewall separado no painel, confira as regras lá também. - Se o domínio tem um registro AAAA (IPv6), ele também precisa apontar para este servidor. Se não aponta, apague o registro.
- O seu servidor web precisa estar rodando e conhecer este domínio.
Instalando e conferindo 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 geralmente está) e remova qualquer Certbot mais antigo instalado pelo apt.
- Instale o Certbot:
sudo snap install --classic certbot - Deixe o comando disponível em qualquer lugar:
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: seu endereço de e-mail, para quais domínios você quer o certificado e se o HTTP deve ser redirecionado para HTTPS.
- Teste a renovação:
sudo certbot renew --dry-run
Se você quer apenas obter o certificado e configurar o resto por conta própria, execute sudo certbot certonly --nginx. O pacote do Certbot adiciona sozinho uma tarefa agendada (cron ou um timer do systemd), e você a vê na saída de systemctl list-timers. O sudo certbot certificates lista seus certificados e as datas de validade. O Certbot renova um certificado quando o prazo dele está acabando, e você não faz nada. A renovação ainda pode falhar um dia (por exemplo, por causa de uma regra de firewall), então execute --dry-run de vez em quando.
Para conferir o certificado, olhe primeiro o ícone de cadeado na barra de endereço do navegador. Para ver a data de validade 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 na saída é a data de validade do certificado. Se você não usa o redirecionamento que o Certbot adiciona, redirecione o HTTP para HTTPS por conta própria. 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 você usa o Caddy, não precisa instalar nada extra. Para um domínio na configuração dele, o Caddy obtém o certificado do Let's Encrypt ou do ZeroSSL, renova-o e redireciona o HTTP para HTTPS. Segundo a documentação oficial, os registros A e AAAA do domínio precisam apontar para o servidor, as portas 80 e 443 precisam estar acessíveis de fora, e a pasta de dados do Caddy precisa ser persistente e gravável. Se você roda o Caddy no Docker, monte essa pasta em um volume. Caso contrário, os certificados somem quando o contêiner é apagado, e pedi-los de novo pode atingir um limite de requisições.
Certificados curinga (wildcard)
Um certificado curinga (*.example.com) cobre todos os subdomínios com um único certificado e só pode ser obtido com a validação DNS-01. Essa validação não usa a porta 80. Ela pede que você coloque um registro TXT no DNS do seu domínio. Para isso, seu provedor de DNS precisa de uma API, e você guarda a chave da API no servidor. A documentação do Let's Encrypt chama de arriscado guardar essas chaves em um servidor web. Se você não precisa de um curinga, obter certificados para domínios individuais com HTTP-01 é mais simples e não exige guardar uma chave de DNS.
Erros comuns
| Sintoma | Causa provável | Solução |
|---|---|---|
| A validação falha, domínio não encontrado | O registro A aponta para o IP errado ou ainda não propagou | Confira o IP com dig +short example.com e espere |
| Timeout | A porta 80 está fechada | Abra a 80 no ufw e no firewall do painel, se você tiver um |
| A validação passa às vezes e falha em outras | O registro AAAA aponta para outro servidor | Corrija ou apague o registro AAAA |
| Erro de limite de requisições (rate limit) | Tentativas demais | Use --dry-run para testes e consulte a página oficial para ver os limites |
| A renovação não roda | Sem tarefa agendada, ou o servidor web bloqueia a porta 80 | O sudo certbot renew --dry-run mostra o erro |
A mensagem de erro geralmente diz qual validação falhou e qual endereço o Let's Encrypt tentou acessar no seu servidor. Leia a mensagem como ela é. A resposta costuma estar 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 com falha por hora para o mesmo nome de domínio. Por isso, use --dry-run enquanto experimenta. Ele testa a renovação no ambiente de homologação (staging) e não gasta o seu limite real.
Nos apps prontos da Seturack
Os apps prontos (WordPress, Nextcloud e outros) abrem por HTTPS em um endereço sslip.io derivado do seu endereço IP, então nenhum nome de domínio é necessário. Quando você conecta o seu próprio domínio, o Caddy obtém o certificado de novo e você não instala nada extra. Os passos para informar o domínio ao Caddy e ao app estão neste artigo de ajuda.
Comentários0
Ainda não há comentários
Seja a primeira pessoa a compartilhar sua opinião.
Entre ou crie uma conta para deixar um comentário.