Este breve tutorial serve para explicar como gerar certificados SSL Wildcard (* ou curinga) usando Let’s Encrypt em servidores baseados no Debian (Ubuntu, etc.)!
Uma das grandes vantagens de gerar um certificado SSL através do domínio é a possibilidade de utilizar uma política de segurança Web chamada HSTS (HTTP Strict Transport Security), ou, ativar o modo Full (strict) nas configurações de SSL/TLS do CloudFlare e assim, aumentar a segurança do seu site ao forçar o acesso somente com uma conexão que sempre tenha um certificado válido na origem.
Antes de começar, certifique-se de que não foi feita nenhuma alteração de DNS dos Nameservers (NS) do seu domínio em menos de 1 hora. Isso é para garantir que a validação possa ocorrer em tempo normal.
Vamos começar!
Passo 1 – Instalar o Let’s Encrypt Certbot
Antes de gerar seus certificados Wildcard gratuitos, primeiro você deve garantir que o certbot esteja instalado e em execução. Para instalá-lo, execute os comandos abaixo:
sudo apt update
sudo apt-get install letsencrypt
Passo 2 – Gerar o Certificado Wildcard
Para gerar certificados Wildcard (curinga), o único “challenge method” aceito pelo Let’s Encrypt é o método de validação por DNS. Não é possível validar certificados Wildcard utilizando o método HTTP.
Após conseguir o acesso ao gerenciador de DNS do seu domínio, execute o comando abaixo e substitua o domínio de exemplo pelo seu domínio:
sudo certbot certonly --manual --preferred-challenges=dns --email admin@exemplo.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d exemplo.com -d *.exemplo.com
As opções de comando acima são explicadas abaixo:
- certonly: Obtenha ou renove um certificado, mas não instale
- –manual: Obter certificados interativamente
- –preferred-challenges=dns: Use o DNS para autenticação
- –server: Especifique o terminal a ser usado para gerar
- –agree-tos: Concorde com os termos de assinante do servidor ACME
- -d: Nomes de domínios para fornecer certificados
Depois de executar o comando acima, Let’s Encrypt fornecerá uma sequência de texto para adicionar um registro TXT à sua entrada DNS.
A saída do comando fica parecido com o exemplo abaixo:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for exemplo.com
dns-01 challenge for exemplo.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.exemplo.com with the following value:
DUhtCPvidLWIxaf06uqh1-WMTHG756TY6zXzOu-cgXU
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Vá para o seu gerenciador de DNS e adicione um registro de texto (TXT) para a primeira sequência que aparecer no seu prompt de comando!
Aguarde uns 5 minutos antes de apertar <Enter> para continuar. Alguns provedores de DNS demoram para propagar alterações.
O certbot pode pedir que você adicione uma segunda sequência utilizando o mesmo subdomínio (name) e isso é permitido para entradas TXT!
Aguarde uns 5 minutos antes de apertar <Enter> para continuar. Você também pode utilizar algum verificador de registro DNS online para ter certeza que o registro TXT está acessível pelo validador de certificado. Recomendo o dnslookup.online para verificar registros DNS.
Após receber a(s) entrada(s) TXT, o Let’s Encrypt irá fazer a validação e confirmar que você é o proprietário do domínio, você verá uma mensagem de sucesso como essa abaixo:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/exemplo.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/exemplo.com/privkey.pem
Your cert will expire on 2020-06-07. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Tudo pronto!
O certificado Wildcard agora está gerado e pronto para ser usado!!!
Passo 3: Verificar o certificado
Para verificar se o certificado está pronto, execute os comandos abaixo:
sudo certbot certificates
Isso deve exibir uma tela semelhante à abaixo:
Found the following certs:
Certificate Name: exemplo.com
Domains: *.exemplo.com
Expiry Date: 2020-06-07 07:48:04+00:00 (VALID: 85 days)
Certificate Path: /etc/letsencrypt/live/exemplo.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/exemplo.com/privkey.pem
Bônus: Configurar a renovação automática
Uma coisa importante: os certificados Let’s Encrypt são válidos somente por 90 dias. Se você não quer ficar entrando no servidor sempre que precisar renovar o certificado, você pode configurar uma tarefa automatizada Cron para renovar automaticamente seu certificado após um certo período de tempo. Abra o Crontab com o comando abaixo:
sudo crontab -e
Selecione seu editor de texto preferido e adicione a linha abaixo:
0 1 * * * /usr/bin/certbot renew >> /var/log/letsencrypt/renew.log
Salve e pronto!
Parabéns! Agora você já sabe como configurar um certificado Let’s Encrypt Wildcard (curinga – *) com renovação automática!
😉