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

Finalizar todos os processos php, nginx, mysql ou qualquer outro tipo

Finalizar todos os processos PHP

kill $(ps aux | grep '[p]hp' | awk '{print $2}')


Finalizar todos os processos Nginx

kill $(ps aux | grep '[n]ginx' | awk '{print $2}')


Finalizar todos os processos MySQL

kill $(ps aux | grep '[m]ysql' | awk '{print $2}')


Você também pode finalizar qualquer outro tipo de processo. Apenas se certifique de substituir [p]hp com o nome do processo e manter a primeira letra entre colchetes.

Obtendo o IP real do usuário com a Cloudflare

 A Cloudflare funciona como um proxy para o site, então ao utilizar funções nativas do PHP, você obtém o IP da Cloudflare e não do usuário, para resolver isso é só utilizar o código:

<?php
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}


Consertando permissões de arquivos e diretórios pela linha de comando

 Aí você está com problemas nas permissões dos arquivos e precisa corrigir em massa, aqui uma solução.

find /pasta/para/ajustar/.* -type f -exec chmod 644 '{}' \;
find /pasta/para/ajustar/.* -type d -exec chmod 755 '{}' \;
find /pasta/para/ajustar/* -type d -exec chmod 755 '{}' \;


Explicando:

  • find → Comando de busca;
  • /pasta/para/ajustar/ → Diretório raiz da busca;
  • -type (f ou d) → Tipo a ser buscado, neste caso: f busca arquivo e d busca diretórios;
  • -exec → Execução do comando, neste caso chmod e suas devidas permissões;
  • {} → Arquivo ou diretório encontrado;
  • \; → Finalização do comando.

Fonte

Verificar a versão do Varnish instalada pela linha de comando

Para checar qual a versão do Varnish instalada, basta executar

varnishd -V

# varnishd -V
varnishd (varnish-5.2.1 revision 67e562482)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2015 Varnish Software AS

Atualizar o Apache para a última versão

Cheque a versão corrente do apache2 com o comando

apache2 -v

#  apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2022-01-05T14:49:56

Verifique em httpd.apache.org/download.cgi qual é a última versão e se diferente da instalada, siga com os demais passos (na escrita deste arquivo, a versão do apache2 era a 2.4.52).

Sabendo que o seu Apache está desatualizado, adicione o repositório abaixo e pressione [ENTER] quando solicitado.

sudo add-apt-repository ppa:ondrej/apache2

# sudo  add-apt-repository ppa:ondrej/apache2
 This branch follows latest Apache2 packages as maintained by the Debian Apache2 team with couple of compatibility patches on top.
It also includes some widely used Apache 2 modules (if you need some other feel free to send me a request).
IMPORTANT: The <foo>-backports is now required on older Ubuntu releases.
BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/#bug-reporting
PLEASE READ: If you like my work and want to give me a little motivation, please consider donating: https://deb.sury.org/#donate
 More info: https://launchpad.net/~ondrej/+archive/ubuntu/apache2
Press [ENTER] to continue or Ctrl-c to cancel adding it.
Hit:1 http://br.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://br.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 http://br.archive.ubuntu.com/ubuntu focal-backports InRelease      
Hit:4 http://br.archive.ubuntu.com/ubuntu focal-security InRelease       
Get:5 http://ppa.launchpad.net/ondrej/apache2/ubuntu focal InRelease [23.8 kB]
Get:6 http://ppa.launchpad.net/ondrej/apache2/ubuntu focal/main amd64 Packages [4,784 B]
Get:7 http://ppa.launchpad.net/ondrej/apache2/ubuntu focal/main Translation-en [3,252 B]
Fetched 31.9 kB in 2s (18.0 kB/s)                   
Reading package lists... Done

Agora atualize a lista de pacotes e atualize os pacotes.
sudo apt update
sudo apt upgrade -y

Cheque novamente a versão do apache2 
apache2 -v
# apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2021-12-28T20:18:12

Qual a versão do Apache2 eu tenho instalada usando a linha de comando?

No terminal basta digitar

apache2 -v

O resultado será como este

Server version: Apache/2.4.52 (Ubuntu)
Server built: 2021-12-28T20:18:12

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'...