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!

😉