Como Segurar o Apache com Let’s Encrypt no Ubuntu

Introdução

Let’s Encrypt é uma Autoridade Certificadora (CA) que facilita a obtenção e instalação de certificados TLS/SSL gratuitos, permitindo assim o uso de HTTPS encriptado em servidores web. Ele simplifica o processo, fornecendo um cliente de software, o Certbot, que tenta automatizar a maioria (se não todos) dos passos necessários. Atualmente, todo o processo de obtenção e instalação de um certificado é completamente automatizado tanto no Apache quanto no Nginx.

Nesta guia, você usará o Certbot para obter um certificado SSL gratuito para o Apache no Ubuntu e garantirá que este certificado seja configurado para renovação automática.

Este tutorial usa um arquivo de host virtual separado em vez do arquivo de configuração padrão do Apache para configurar o site que será seguro pelo Let’s Encrypt. Recomendamos criar novos arquivos de host virtual do Apache para cada domínio hospedado em um servidor, pois isso ajuda a evitar erros comuns e mantém os arquivos de configuração padrão como configuração de fallback.

Como garantir a segurança do Apache com Let’s Encrypt no Ubuntu

  1. Instalando o Certbot
  2. Verificando a configuração do seu Virtual Host do Apache
  3. Permitindo HTTPS através do Firewall
  4. Obtendo um Certificado SSL
  5. Verificando a Renovação Automática do Certbot

Pré-requisitos

Para seguir este tutorial, você precisará:

  • Um servidor Ubuntu configurado com um usuário não-root com privilégios administrativos sudo e firewall habilitado. Você pode configurar isso seguindo nosso tutorial de configuração inicial do servidor para Ubuntu.

  • Um nome de domínio registrado por completo. Este tutorial usará seu_dominio como exemplo ao longo do texto. Você pode comprar um nome de domínio no Namecheap, obter um de graça no Freenom, ou usar o registrador de domínio de sua escolha.

  • Os dois seguintes registros DNS foram configurados para o seu servidor. Você pode seguir essa introdução ao DNS da DigitalOcean para obter detalhes sobre como adicioná-los.

    • Um registro A com seu_dominio apontando para o endereço IP público do seu servidor.
    • Um registro A com www.seu_dominio apontando para o endereço IP público do seu servidor.
  • O Apache foi instalado seguindo Como Instalar o Apache no Ubuntu. Certifique-se de que você tem um arquivo de host virtual para o seu domínio. Este tutorial usará /etc/apache2/sites-available/seu_dominio.conf como exemplo.

Passo 1 — Instalando o Certbot

Para obter um certificado SSL com o Let’s Encrypt, você precisa instalar o software Certbot no seu servidor. Você usará os repositórios de pacotes Ubuntu padrão para isso.

Primeiro, atualize o índice local de pacotes:

  1. sudo apt update

Você precisa de dois pacotes: certbot e python3-certbot-apache. Este último é um plugin que integra o Certbot com o Apache, permitindo automatizar a obtenção de um certificado e a configuração de HTTPS no seu servidor web com um único comando:

  1. sudo apt install certbot python3-certbot-apache

Você será solicitado a confirmar a instalação pressionando S, depois ENTER.

O Certbot agora está instalado no seu servidor. Na próxima etapa, você verificará a configuração do Apache para garantir que seu host virtual esteja configurado adequadamente. Isso garantirá que o script do cliente certbot será capaz de detectar seus domínios e reconfigurar seu servidor web para usar automaticamente o certificado SSL recém-gerado.

Etapa 2 — Verificando a Configuração do Seu Host Virtual Apache

Para obter e configurar automaticamente o SSL para seu servidor web, o Certbot precisa encontrar o host virtual correto dentro dos arquivos de configuração do Apache. Os nomes de domínio do seu servidor serão recuperados das diretivas ServerName e ServerAlias definidas dentro do bloco de configuração VirtualHost.

Se você seguiu a etapa de configuração do host virtual no tutorial de instalação do Apache, deve ter um bloco VirtualHost configurado para seu domínio em /etc/apache2/sites-available/seu_dominio.conf com as diretivas ServerName e também ServerAlias já configuradas adequadamente.

Para confirmar que isso está configurado, abra o arquivo do host virtual para seu domínio usando nano ou seu editor de texto preferido:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Procure as linhas existentes ServerName e ServerAlias. Elas devem ser listadas da seguinte maneira:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Se você já tem seus ServerName e ServerAlias configurados assim, pode sair do seu editor de texto e passar para o próximo passo. Se a configuração atual do seu host virtual não corresponder ao exemplo, atualize-a conforme necessário. Se você estiver usando nano, pode sair pressionando CTRL+X, depois Y e ENTER para confirmar suas alterações, se houver. Em seguida, execute o seguinte comando para validar suas alterações:

  1. sudo apache2ctl configtest

Você deve receber Syntax OK como resposta. Se receber um erro, reabra o arquivo do host virtual e verifique se há algum erro de digitação ou caractere ausente. Uma vez que a sintaxe do seu arquivo de configuração esteja correta, recarregue o Apache para que as alterações entrem em vigor:

  1. sudo systemctl reload apache2

Com essas alterações, o Certbot será capaz de encontrar o bloco VirtualHost correto e atualizá-lo.

Em seguida, você atualizará o firewall para permitir o tráfego HTTPS.

Etapa 3 — Permitindo HTTPS Através do Firewall

Se você tiver o firewall UFW habilitado, conforme recomendado pelos guias de pré-requisitos, precisará ajustar as configurações para permitir o tráfego HTTPS. Após a instalação, o Apache registra alguns perfis de aplicativos UFW diferentes. Você pode usar o perfil Apache Full para permitir tanto o tráfego HTTP quanto HTTPS no seu servidor.

Para verificar que tipo de tráfego está atualmente permitido no seu servidor, verifique o status:

  1. sudo ufw status

Se você seguiu um dos nossos guias de instalação do Apache, terá uma saída semelhante à seguinte, significando que apenas o tráfego HTTP na porta 80 está atualmente permitido:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

Para permitir o tráfego HTTPS, permita o perfil “Apache Full”:

  1. sudo ufw allow 'Apache Full'

Em seguida, exclua o perfil redundante “Apache”:

  1. sudo ufw delete allow 'Apache'

O seu status será exibido como follows:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

Agora você está pronto para executar o Certbot e obter seus certificados.

Etapa 4 — Obtendo um Certificado SSL

O Certbot oferece várias maneiras de obter certificados SSL através de plugins. O plugin Apache cuidará de reconfigurar o Apache e recarregar a configuração sempre que necessário. Para usar esse plugin, execute o seguinte:

  1. sudo certbot --apache

Esse script irá solicitar que você responda a uma série de perguntas para configurar seu certificado SSL. Primeiro, ele pedirá um endereço de e-mail válido. Esse e-mail será usado para notificações de renovação e avisos de segurança:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

Depois de fornecer um endereço de e-mail válido, pressione ENTER para prosseguir para a próxima etapa. Você será então solicitado a confirmar se você concorda com os termos de serviço do Let’s Encrypt. Você pode confirmar pressionando Y e então ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Em seguida, você será perguntado se deseja compartilhar seu e-mail com a Electronic Frontier Foundation para receber notícias e outras informações. Se você não quiser se inscrever no conteúdo deles, escreva N. Caso contrário, escreva Y e pressione ENTER para prosseguir para a próxima etapa:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

A próxima etapa solicitará que você informe ao Certbot quais domínios você gostaria de ativar o HTTPS. Os nomes de domínio listados são obtidos automaticamente da sua configuração de host virtual do Apache, então é importante garantir que você tenha as configurações corretas de ServerName e ServerAlias em seu host virtual. Se você gostaria de habilitar o HTTPS para todos os nomes de domínio listados (recomendado), pode deixar o prompt em branco e pressionar ENTER para prosseguir. Caso contrário, selecione os domínios que deseja habilitar o HTTPS, listando cada número apropriado, separado por vírgulas e/ou espaços, e então pressione ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

Depois dessa etapa, a configuração do Certbot está concluída, e você será apresentado às considerações finais sobre seu novo certificado e onde localizar os arquivos gerados:

Output
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Seu certificado agora está instalado e carregado na configuração do Apache. Tente recarregar seu site usando https:// e observe o indicador de segurança do seu navegador. Ele deve indicar que seu site está devidamente protegido, geralmente com um ícone de fechadura na barra de endereço.

Você pode usar o SSL Labs Server Test para verificar a classificação do seu certificado e obter informações detalhadas sobre ele,从a perspectiva de um serviço externo.

No próximo e último passo, você testará o recurso de renovação automática do Certbot, que garante que seu certificado seja renovado automaticamente antes da data de expiração.

Passo 5 — Verificando a Renovação Automática do Certbot

Os certificados do Let’s Encrypt são válidos apenas por noventa dias. Isso é para incentivar os usuários a automatizar seu processo de renovação de certificados, bem como garantir que certificados mal utilizados ou chaves roubadas expirem mais cedo do que tarde.

O pacote certbot que você instalou cuida das renovações incluindo um script de renovação em /etc/cron.d, que é gerenciado por um serviço systemctl chamado certbot.timer. Esse script é executado duas vezes ao dia e renovará automaticamente qualquer certificado que esteja dentro de trinta dias de expiração.

Para verificar o status desse serviço e garantir que ele está ativo, execute o seguinte:

  1. sudo systemctl status certbot.timer

Sua saída será semelhante à seguinte:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

Para testar o processo de renovação, você pode fazer um teste de impressão com o certbot:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Se você não receber nenhum erro, está tudo pronto. Quando necessário, o Certbot renovará seus certificados e recarregará o Apache para capturar as mudanças. Se o processo de renovação automática falhar algum dia, o Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, avisando você quando seu certificado está prestes a expirar.

Conclusão

Neste tutorial, você instalou o cliente Let’s Encrypt certbot, configurou e instalou um certificado SSL para seu domínio e confirmou que o serviço de renovação automática do Certbot está ativo dentro do systemctl. Se você tiver mais perguntas sobre o uso do Certbot, suha documentação é um bom lugar para começar.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu