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.
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.
your_domain
apontando para o endereço IP público do seu servidor.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.
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.
- 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.
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:
- sudo nano /etc/apache2/sites-available/your_domain.conf
Encontre as linhas existentes do ServerName
e do ServerAlias
. Elas devem se parecer com isto:
...
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:
- 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:
- 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.
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:
- 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:
OutputStatus: 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":
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 'Apache'
Seu status agora se parecerá com este:
- sudo ufw status
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.
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:
- 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:
OutputSaving 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.
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:
- 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
:
- 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.
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.
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.