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 para15c74e54-b235-44bb-be8e-8e5d934b9c1b.auth.acme-dns.io
Para validar o DNS, utilizedig _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 em2023-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:
- Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
- Donating to EFF: https://eff.org/donate-le
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