Introdução
Let’s Encrypt é uma Autoridade Certificadora (CA) que facilita a obtenção e instalação de certificados TLS/SSL gratuitos, permitindo assim a criptografia HTTPS em servidores web. Ele simplifica o processo, fornecendo um cliente de software, 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á protegido 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 uma configuração de fallback.
Como Garantir a Segurança do Apache com Let’s Encrypt no Ubuntu
- Instalando o Certbot
- Verificando a Configuração do Seu Virtual Host do Apache
- Permitindo HTTPS Através do Firewall
- Obtendo um Certificado SSL
- 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_domínio 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 a introdução da DigitalOcean DNS 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.
- Um registro A com
-
O Apache foi instalado seguindo a 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 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:
Você precisa de dois pacotes: certbot
e python3-certbot-apache
. Este último é um plugin que integra o Certbot com o Apache, tornando possível automatizar a obtenção de um certificado e configurar HTTPS no seu servidor web com um único comando:
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 de maneira adequada. 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 sua Configuração de Host Virtual do 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 o passo de configuração de 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 de maneira adequada.
Para confirmar se isso está configurado, abra o arquivo de host virtual para seu domínio usando nano
ou seu editor de texto preferido:
Encontre as linhas existentes ServerName
e ServerAlias
. Elas devem ser listadas da seguinte forma:
...
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 a próxima etapa. 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:
Você deve receber Syntax OK
como resposta. Se você receber um erro, reabra o arquivo do host virtual e verifique se há algum erro de digitação ou caractere faltando. Uma vez que a sintaxe do seu arquivo de configuração esteja correta, recarregue o Apache para que as alterações entrem em vigor:
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 vários 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:
Se você seguiu um dos nossos guias de instalação do Apache, terá uma saída semelhante à seguinte, o que significa que apenas o tráfego HTTP na porta 80
está atualmente permitido:
OutputStatus: 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”:
Em seguida, exclua o perfil redundante “Apache”:
Seu status será exibido como a seguir:
OutputStatus: 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 oferece várias maneiras de obter certificados SSL através de plugins. O plugin do Apache cuidará de reconfigurar o Apache e recarregar a configuração sempre que necessário. Para usar este plugin, execute o seguinte:
Este script 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. Este e-mail será usado para notificações de renovação e avisos de segurança:
OutputSaving 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 o próximo passo. Você será então solicitado a confirmar se concorda com os termos de serviço do Let’s Encrypt. Você pode confirmar pressionando Y
e em seguida 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á solicitado a compartilhar seu e-mail com a Electronic Frontier Foundation para receber notícias e outras informações. Se você não quiser se inscrever para seus conteúdos, 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
no seu host virtual. Se você quiser 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 você 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 desta etapa, a configuração do Certbot estará concluída e você será apresentado às observações finais sobre seu novo certificado e onde localizar os arquivos gerados:
OutputSuccessfully 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á adequadamente seguro, tipicamente com um ícone de cadeado na barra de endereço.
Você pode usar o SSL Labs Server Test para verificar a nota do seu certificado e obter informações detalhadas sobre ele, desde a perspectiva de um serviço externo.
No próximo e último passo, você testará a função de renovação automática do Certbot, que garante que seu certificado será 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 serve para incentivar os usuários a automatizarem o processo de renovação de seus certificados, além de 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 estiver dentro de trinta dias de expiração.
Para verificar o status desse serviço e garantir que ele está ativo, execute o seguinte:
Sua saída será semelhante ao 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 simulado com o certbot
:
OutputSaving 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 aplicar as mudanças. Se o processo de renovação automatizada falhar algum dia, o Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, avisando 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, sua 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