Gerando um Certificado via DNS com Let's Encrypt e Certbot

A geração de um certificado digital é uma etapa importante no processo de implementação de segurança em um site ou aplicação web. O Let's Encrypt é uma autoridade de certificação gratuita e amplamente utilizada para emissão de certificados digitais, permitindo que qualquer pessoa possa obter um certificado SSL/TLS para o seu site de forma simples e rápida.

Existem vários métodos de validação de domínio que podem ser utilizados para gerar um certificado digital com o Let's Encrypt, como a validação HTTP. No entanto, a validação via DNS é uma opção muito conveniente em alguns casos, especialmente quando a validação HTTP não é possível.

A validação via DNS funciona inserindo um registro TXT especial no sistema de DNS do domínio que está sendo validado. Isso permite que o Let's Encrypt verifique se o solicitante tem controle sobre o domínio em questão. Uma vez que o registro TXT é adicionado corretamente ao DNS, o certificado digital pode ser emitido com sucesso.

Neste tutorial, vamos explorar como gerar um certificado digital com o Let's Encrypt usando o Certbot e a ferramenta acme-dns-certbot-joohoi para validação via DNS. Este método é especialmente útil em cenários onde a validação HTTP não é possível ou desejável, por exemplo, quando o site ou aplicação está hospedado em um servidor local sem um IP público ou ainda quando o IP está por trás de um firewall que permite apenas conexões de determinados IPs.

Instalação

Para prosseguir com a geração do certificado digital usando a validação via DNS, é necessário ter o Python instalado no sistema e também o Certbot na versão 0.10 ou superior. Verifique a versão do Certbot instalada no seu sistema usando o comando certbot --version no terminal. Se você não tiver o Python ou o Certbot instalados, siga as instruções fornecidas pela documentação oficial para instalá-los antes de continuar.

Agora instalaremos o script que irá fazer a sincronia do registro TXT. Primeiramente vamos baixar e após atribuímos a permissão de execução. wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py chmod +x acme-dns-auth.py

Ajustaremos o script para utilizar o Python correto. sed -i 's/#!\/usr\/bin\/env python/#!\/usr\/bin\/env python3/' acme-dns-auth.py

Moveremos o script para a pasta /etc/letsencrypt/. sudo mv acme-dns-auth.py /etc/letsencrypt/

Gerando o certificado

É importante notar que o comando para gerar o certificado digital via DNS com o Certbot não realiza automaticamente a instalação do certificado no servidor web em uso. Depois de gerar o certificado, é necessário configurar o servidor web manualmente para utilizar o novo certificado. {.is-warning}

Ao ser executado pela primeira vez, por meio do serviço acme-dns será gerado um endereço no formato cb43ef4c-e484-7040-8d7c-352c2a04cb9d.auth.acme-dns.io. Este endereço deve ser utilizado para criar o CNAME _acme-challenge.domain.tld e apontá-lo para o endereço gerado pelo acme-dns, como parte do processo de validação via DNS para a emissão do certificado digital. Não se preocupe, isso aparecerá apenas da primeira execução.

Utilize o comando abaixo para gerar o certificado digital para o domínio ou subdomínio escolhido. sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.domain.tld -d domain.tld

Aqui um exemplo com os retornos e comentários.

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.domain.tld [sudo] senha para myuser: Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for subdomain.domain.tld Hook '--manual-auth-hook' for subdomain.domain.tld ran with output: Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.domain.tld CNAME 15c74e54-b235-44bb-be8e-8e5d934b9c1b.auth.acme-dns.io.

Agora é o momento onde você vai criar a entrada DNS do tipo CNAME para _acme-challenge.subdomain.domain.tld e apontar para 15c74e54-b235-44bb-be8e-8e5d934b9c1b.auth.acme-dns.io Para validar o DNS, utilize dig _acme-challenge.subdomain.domain.tld txt esperando obter um resultado semelhante ao abaixo:

;; ANSWER SECTION: _acme-challenge.subdomain.domain.tld. 300 IN CNAME 15c74e54-b235-44bb-be8e-8e5d934b9c1b.auth.acme-dns.io. 15c74e54-b235-44bb-be8e-8e5d934b9c1b.auth.acme-dns.io. 1 IN TXT "ZcmQACAhlpDGWlDF6_ksvZWSxn-GuN-r3YbFvD4V7zQ"


Challenges loaded. Press continue to submit to CA. Pass "-v" for more info about challenges.


Press Enter to Continue

Se ajustou o DNS e validou, pressione ENTER para continuar. {.is-info}

Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/subdomain.domain.tld/fullchain.pem Key is saved at: /etc/letsencrypt/live/subdomain.domain.tld/privkey.pem This certificate expires on 2023-06-28.

O certificado gerado é /etc/letsencrypt/live/subdomain.domain.tld/fullchain.pem, a chave do certificado é /etc/letsencrypt/live/subdomain.domain.tld/privkey.pem e exipira em 2023-06-28

These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background.


If you like Certbot, please consider supporting our work by:


Parabéns! O certificado digital foi gerado com sucesso. Agora é necessário configurá-lo no servidor web em uso, como o Nginx ou Apache, para garantir a segurança e privacidade dos dados transmitidos pelo seu site ou aplicação web.

As credenciais do acme-dns ficam em /etc/letsencrypt/acmedns.json.

Renovação do certificado

Quando seus certificados estiverem quase expirando, o Certbot poderá renová-los automaticamente para você: sudo certbot renew

O processo de renovação pode ser executado do início ao fim sem interação do usuário e irá lembrar todas as opções de configuração que você especificou durante a instalação inicial.

Para testar se isso está funcionando sem precisar esperar até a data de expiração se aproximar, você pode executar uma simulação do processo de renovação, sem fazer nenhuma alteração real na sua configuração.

Você pode iniciar uma simulação usando o comando padrão de renovação, mas com o argumento --dry-run: sudo certbot renew --dry-run

Gerando um Certificado via DNS com Let's Encrypt e Certbot

A geração de um certificado digital é uma etapa importante no processo de implementação de segurança em um site ou aplicação web. O Let'...