Tutorial

Como proteger o Apache com o Let's Encrypt no Ubuntu 20.04

Published on May 15, 2020
Default avatar

By Erika Heidi

Developer Advocate

Português
Como proteger o Apache com o Let's Encrypt no Ubuntu 20.04

Introdução

O Let’s Encrypt é uma autoridade de certificação (CA) que facilita a obtenção e instalação de certificados TLS/SSL gratuitos, habilitando assim protocolos HTTPS criptografados em servidores Web. Ela simplifica o processo ao fornecer um cliente de software, o Certbot, que tenta automatizar a maioria (se não todas) das etapas necessárias. Atualmente, todo o processo de obtenção e instalação de um certificado é totalmente automatizado em Apache e Nginx.

Neste guia, usaremos o Certbot para obter um certificado SSL gratuito para o Apache no Ubuntu 20.04, e nos certificaremos de que esse certificado esteja configurado para se renovar automaticamente.

Este tutorial utiliza um arquivo de host virtual separado, em vez do arquivo de configuração padrão do Apache para a configuração do site que será protegido pelo Let’s Encrypt. Recomendamos que você crie novos arquivos de host virtual Apache para cada domínio hospedado em um servidor. Isso é feito pois ajuda a evitar erros comuns e mantém os arquivos de configuração padrão como uma configuração de fallback.

Pré-requisitos

Para seguir este tutorial, você vai precisar do seguinte:

  • Um servidor Ubuntu 20.04 configurado seguindo este tutorial de configuração inicial do servidor para o Ubuntu 20.04, incluindo um usuário não-root com sudo e um firewall.

  • Um nome de domínio totalmente registrado. Este tutorial usará o your_domain como um exemplo. Você pode comprar um nome de domínio em Namecheap, obter um gratuitamente em Freenom ou usar o registrado de domínios de sua escolha.

  • Ambos os registros de DNS a seguir serão configurados para o seu servidor. Você pode seguir esta introdução para DNS DigitalOcean para mais detalhes sobre como adicioná-los.

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

Etapa 1 — Instalando o Certbot

Para obtermos um certificado SSL com o Let’s Encrypt, vamos primeiro precisar instalar o software Certbot em seu servidor. Vamos usar os repositórios de pacotes padrão do Ubuntu para isso.

Precisamos de dois pacotes: o certbot, e o python3-certbot-apache. O segundo é um plug-in que integra o Certbot com o Apache, tornando possível automatizar a obtenção de um certificado e a configuração do HTTPS em seu servidor Web com um único comando.

  1. sudo apt install certbot python3-certbot-apache

Você será solicitado a confirmar a instalação do Apache pressionando Y e, depois, ENTER.

Agora, o Certbot está instalado em seu servidor. No próximo passo, vamos verificar a configuração do Apache para garantir que seu host virtual esteja configurado corretamente. Isso garantirá que o script certbot do cliente consiga detectar seus domínios e reconfigurar o servidor Web para usar o certificado SSL recém-criado e gerado automaticamente.

Passo 2 — Verificando sua configuração de host virtual do Apache

Para conseguir obter e configurar o SSL automaticamente para o seu servidor Web, o Certbot precisa encontrar o host virtual correto dentro dos seus arquivos de configuração do Apache. Seu(s) nome(s) de domínio de servidor serão recuperado das diretivas ServerName e ServerAlias definidas dentro do seu bloco de configuração VirtualHost.

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

Para verificar isso, abra o arquivo de host virtual para seu domínio usando o nano ou seu editor de texto preferido:

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

Encontre as linhas existentes do ServerName e do ServerAlias. Elas devem se parecer com isto:

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

Se você já tiver seu ServerName e ServerAlias configurados desta forma, você pode sair do seu editor de texto e seguir para o próximo passo. Se você estiver usando o nano, você pode sair digitando CTRL+X, depois Y e ENTER para confirmar.

Se a configuração de host virtual não corresponder ao exemplo, atualize-a conforme necessário. Quando você terminar, salve o arquivo e saia do editor. Em seguida, execute o seguinte comando para validar suas alterações:

  1. sudo apache2ctl configtest

Você deve obter um Syntax OK como resposta. Se aparecer um erro, abra novamente o arquivo de host virtual e verifique se há erros de digitação ou se faltam caracteres. Assim que a sintaxe do seu arquivo de configuração estiver 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 do VirtualHost correto e atualizá-lo.

Em seguida, atualizaremos o firewall para permitir o tráfego HTTPS.

Etapa 3 — Permitindo tráfego HTTPS pelo firewall

Se você tem o firewall UFW ativado, conforme recomendado pelos guias de pré-requisitos, será necessário ajustar as configurações para permitir o tráfego HTTPS. Após a instalação, o Apache registra alguns perfis diferentes de aplicativos do UFW. Podemos aproveitar o perfil Apache Full para permitir tanto o tráfego HTTP quanto HTTPS em seu servidor.

Para verificar o tipo de tráfego que está sendo permitido atualmente em seu servidor, você pode usar:

  1. sudo ufw status

Se você seguiu um de nossos guias de instalação do Apache, seu resultado deve se parecer com isto, o que significa que apenas o tráfego HTTP na porta 80 está sendo permitido:

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

Para também permitir o tráfego HTTPS, permita o perfil “Apache Full” e exclua o perfil “Apache” redundante":

  1. sudo ufw allow 'Apache Full'
  2. sudo ufw delete allow 'Apache'

Seu status agora se parecerá com este:

  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.

Passo 4 — Obtendo um certificado SSL

O Certbot oferecer várias maneiras de obter certificados SSL através de plug-ins. O plug-in do Apache cuidará da reconfiguração do Apache e recarregará a configuração sempre que necessário. Para usar este plug-in, digite o seguinte:

  1. sudo certbot --apache

Este script solicitará que você responda a uma série de perguntas para configurar seu certificado SSL. Primeiro, ele irá 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 Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

Após fornecer um endereço de e-mail válido, clique em ENTER para continuar para o próximo passo. Em seguida, você será solicitado a confirmar se está de acordo com os termos de serviço do Let’s Encrypt. Você pode confirmar pressionando A e, depois, 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Em seguida, você será questionado se deseja compartilhar seu e-mail com a Electronic Frontier Foundation para receber notícias e outras informações. Se você não deseja se inscrever para receber esse conteúdo, digite N. Caso contrário, digite Y. Em seguida, clique em ENTER para continuar para o próximo passo.

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

O próximo passo solicitará que você informe ao Certbot para 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. Por esse motivo, é importante garantir que você tenha as definições corretas do ServerName e ServerAlias configuradas em seu host virtual. Se você quiser habilitar o HTTPS para todos os nomes de domínio listados (recomendado), você pode deixar o prompt em branco e apertar ENTER para continuar. Caso contrário, selecione os domínios para os quais deseja habilitar o HTTPS listando cada número apropriado, separados por vírgulas e/ou espaços. Então, clique em 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):

Você verá um resultado como este:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

Em seguida, você será solicitado a selecionar se deseja ou não que o tráfego HTTP seja redirecionado para HTTPS. Na prática, isso significa que quando alguém visita seu site através de canais não criptografados (HTTP), essa pessoa será redirecionada automaticamente para o endereço HTTPS do seu site. Escolha 2 para habilitar o redirecionamento, ou 1 se você deseja manter ambos HTTP e HTTPS como métodos separados de acesso ao seu site.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Após esse passo, a configuração do Certbot está concluída. As observações finais sobre seu novo certificado, onde localizar os arquivos gerados e como testar sua configuração usando uma ferramenta externa que analisa a autenticidade do seu certificado serão apresentadas a você:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2020-07-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

Agora, seu certificado está instalado e carregado na configuração do Apache. Tente recarregar o site usando https:// e verifique o indicador de segurança do seu navegador. Ele deve mostrar que seu site está devidamente protegido, e faz isso normalmente incluindo um ícone de cadeado na barra de endereços.

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

No próximo passo final, vamos testar a funcionalidade de renovação automática do Certbot, que garante que seu certificado seja renovado automaticamente antes da data de expiração.

Etapa 5 — Verificando a renovação automática do Certbot

Os certificados da Let’s Encrypt possuem validade de apenas 90 dias. Isso acontece para encorajar os usuários a automatizar o processo de renovação de certificados, além de garantir que os certificados mal utilizados ou chaves roubadas expirem o quanto antes.

O pacote certbot que instalamos cuida das renovações, através da inclusão de um script de renovação em /etc/cron.d, que é gerenciado por um serviço systemctl chamado certbot.timer. Esse script é executado duas vezes por dia e renova automaticamente qualquer certificado que expire dentro de trinta dias.

Para verificar o status deste serviço e garantir que ele esteja ativo e em execução, você pode usar:

  1. sudo systemctl status certbot.timer

Você obterá um resultado parecido com este:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

Para testar o processo de renovação, você pode realizar uma simulação com o certbot:

  1. sudo certbot renew --dry-run

Se não aparecerem erros, tudo funcionou. Quando necessário, o Certbot renovará seus certificados e recarregará o Apache para aplicar as alterações. Se o processo de renovação automatizada alguma vez falhar, a Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, informando quando o certificado vai expirar.

Conclusão

Neste tutorial, você instalou o certbot do cliente do Let’s Encrypt, 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. Em caso de outras dúvidas sobre como usar o Certbot, a documentação da ferramenta é um bom ponto de partida.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar

Developer Advocate

Dev/Ops passionate about open source, PHP, and Linux.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
3 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Muuuito bom tutorial, parabéns.

This tutorial is incredible. However in my case only the homepage of the site is ok. The internal pages after domain / page are left with a port error 443. :(

https://snipboard.io/LXEwfC.jpg

Hello I performed the procedure, but you are giving this error:

Waiting for verification… Challenge failed for domain test.test.com http-01 challenge for test.test.com Cleaning up challenges Some challenges have failed.

IMPORTANT NOTES:

  • The following errors were reported by the server:

    Domain: test.test.com Type: connection Detail: Fetching http://test.test.com/.well-known/acme-challenge/Cazsdxrz-EE4m0R81FAU6F8AH-Z7R4scWY-TonrH9w: Timeout during connect (likely firewall problem)

    To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you’re using the webroot plugin, you should also verify that you are serving files from the webroot path you provided.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel