Introdução
O Let’s Encrypt é uma Autoridade de Certificação (AC) que oferece uma maneira acessível de obter e instalar certificados TLS/SSL gratuitos, possibilitando assim o uso do HTTPS criptografado em servidores web. Ele simplifica o processo fornecendo um cliente de software, o Certbot, que tenta automatizar a maioria (se não todos) os passos necessários. Atualmente, todo o processo de obtenção e instalação de um certificado é totalmente automatizado tanto no Apache quanto no Nginx.
Neste tutorial, você usará o Certbot para obter um certificado SSL gratuito para o Nginx no Rocky Linux 9 e configurar seu certificado para renovar automaticamente.
Este tutorial usará um arquivo de configuração separado do servidor Nginx em vez do arquivo padrão. Você deve criar novos arquivos de bloco de servidor Nginx para cada domínio, pois isso ajuda a evitar erros comuns e mantém os arquivos padrão como uma configuração de fallback.
Pré-requisitos
Para seguir este tutorial, você precisará:
-
Um servidor Rocky Linux 9 configurado seguindo este tutorial de configuração inicial do servidor para Rocky Linux 9, incluindo um usuário não-root com permissões sudo e um firewall.
-
Um nome de domínio registrado. Este tutorial usará
example.com
como exemplo. Você pode adquirir um nome de domínio na Namecheap, obter um gratuitamente no Freenom, ou usar o registrador de domínios de sua escolha. -
Ambos os seguintes registros DNS configurados para o seu servidor. Se estiver usando a DigitalOcean, consulte nossa documentação de DNS para detalhes sobre como adicioná-los.
- Um registro A com
example.com
apontando para o endereço IP público do seu servidor. - Um registro A com
www.example.com
apontando para o endereço IP público do seu servidor.
- Um registro A com
-
O Nginx instalado seguindo Como Instalar o Nginx no Rocky Linux 9. Certifique-se de ter um bloco de servidor para o seu domínio. Este tutorial usará
/etc/nginx/sites-available/example.com
como exemplo.
Passo 1 — Instalando o Certbot
Primeiramente, você precisa instalar o pacote de software certbot
. Faça login na sua máquina Rocky Linux 8 como usuário não root:
- ssh sammy@your_server_ip
O pacote certbot
não está disponível por padrão no gerenciador de pacotes. Você precisará habilitar o repositório EPEL para instalar o Certbot.
Para adicionar o repositório EPEL do Rocky Linux 9, execute o seguinte comando:
- sudo dnf install epel-release
Quando solicitado a confirmar a instalação, digite e pressione y
.
Agora que você tem acesso ao repositório adicional, instale todos os pacotes necessários:
- sudo dnf install certbot python3-certbot-nginx
Isso instalará o Certbot e o plugin Nginx para o Certbot, necessário para executar o programa.
O processo de instalação perguntará sobre a importação de uma chave GPG. Confirme para que a instalação possa ser concluída.
Agora que você tem o Certbot instalado, vamos executá-lo para obter um certificado.
Passo 2 — Confirmando a Configuração do Nginx
O Certbot precisa encontrar o bloco server
correto em sua configuração do Nginx para configurar automaticamente o SSL. Especificamente, ele faz isso procurando uma diretiva server_name
que corresponda ao domínio para o qual você solicita um certificado.
Se você seguiu as etapas de configuração do bloco de servidor no tutorial de instalação do Nginx, deve ter um bloco de servidor para seu domínio em /etc/nginx/conf.d/example.com
com a diretiva server_name
já configurada adequadamente.
Para verificar, abra o arquivo de configuração para seu domínio usando o nano
ou seu editor de texto favorito:
- sudo nano /etc/nginx/conf.d/example.com
Encontre a linha existente server_name
. Deve se parecer com isso:
...
server_name example.com www.example.com;
...
Se estiver correto, saia do editor e prossiga para o próximo passo.
Se não estiver, atualize para que corresponda. Em seguida, salve o arquivo, saia do editor e verifique a sintaxe de suas edições de configuração:
- sudo nginx -t
Se você receber um erro, reabra o arquivo de bloco do servidor e verifique se há algum erro de digitação ou caracteres ausentes. Uma vez que a sintaxe do seu arquivo de configuração esteja correta, recarregue o Nginx para carregar a nova configuração:
- sudo systemctl reload nginx
O Certbot agora pode encontrar o bloco server
correto e atualizá-lo automaticamente.
Em seguida, vamos atualizar o firewall para permitir o tráfego HTTPS.
Passo 3 — Atualizando as Regras do Firewall
Como sua configuração prévia habilita o firewalld
, você precisará ajustar as configurações do firewall para permitir conexões externas no seu servidor web Nginx.
Para verificar quais serviços já estão habilitados, execute o comando:
- sudo firewall-cmd --permanent --list-all
Você receberá uma saída como esta:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Se você não ver http
na lista de serviços, habilite-o executando:
- sudo firewall-cmd --permanent --add-service=http
Para permitir o tráfego https
, execute o seguinte comando:
- sudo firewall-cmd --permanent --add-service=https
Para aplicar as alterações, você precisará recarregar o serviço do firewall:
- sudo firewall-cmd --reload
Agora que você abriu seu servidor para o tráfego https, você está pronto para executar o Certbot e buscar seus certificados.
Passo 4 — Obtendo um Certificado SSL
O Certbot oferece uma variedade de maneiras de obter certificados SSL através de plugins. O plugin Nginx cuidará de reconfigurar o Nginx e recarregar a configuração sempre que necessário. Para usar este plugin, digite o seguinte:
- sudo certbot --nginx -d example.com -d www.example.com
Isso executa o certbot
com o plugin --nginx
, usando -d
para especificar os nomes de domínio para os quais você precisa que o certificado seja válido.
Ao executar o comando, você será solicitado a inserir um endereço de e-mail e concordar com os termos de serviço. Após fazer isso, você deverá ver uma mensagem informando que o processo foi bem-sucedido e onde seus certificados estão armazenados:
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-12-15.
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/nginx/conf.d/your_domain.conf
Successfully deployed certificate for www.your_domain to /etc/nginx/conf.d/your_domain.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
…
Seus certificados são baixados, instalados e carregados, e sua configuração Nginx agora redirecionará automaticamente todas as solicitações da web para https://
. Tente recarregar seu site e observe o indicador de segurança do seu navegador. Deve indicar que o site está devidamente seguro, geralmente com um ícone de cadeado. Se você testar seu servidor usando o Teste do Servidor SSL Labs, ele receberá uma nota A.
Vamos terminar testando o processo de renovação.
Passo 5 — Verificando a Renovação Automática do Certbot
Os certificados Let’s Encrypt são válidos por 90 dias, mas é recomendado renová-los a cada 60 dias para permitir uma margem de erro. O cliente Let’s Encrypt Certbot possui um comando renew
que verifica automaticamente os certificados instalados atualmente e tenta renová-los se estiverem a menos de 30 dias da data de expiração.
Você pode testar a renovação automática dos seus certificados executando este comando:
- sudo certbot renew --dry-run
A saída será semelhante a esta:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for monitoring.pp.ua
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
...
Observe que se você criou um certificado agrupado com vários domínios, apenas o nome de domínio base será exibido na saída, mas a renovação funcionará para todos os domínios incluídos neste certificado.
A practical way to ensure your certificates will not get outdated is to create a cron
job that will periodically execute the automatic renewal command for you. Since the renewal first checks for the expiration date and only executes the renewal if the certificate is less than 30 days away from expiration, it is safe to create a cron job that runs every week, or even every day.
Edite o crontab para criar um novo trabalho que executará a renovação duas vezes por dia. Para editar o crontab para o usuário root, execute:
- sudo crontab -e
Seu editor de texto abrirá o crontab padrão, que é um arquivo de texto vazio neste momento. Entre no modo de inserção pressionando i
e adicione a seguinte linha:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
Quando terminar, pressione ESC
para sair do modo de inserção, então :wq
e ENTER
para salvar e sair do arquivo. Para saber mais sobre o editor de texto Vi e seu sucessor Vim, confira nosso tutorial Instalando e Usando o Editor de Texto Vim em um Servidor na Nuvem.
Isso criará um novo trabalho cron que será executado ao meio-dia e à meia-noite todos os dias. python -c 'import random; import time; time.sleep(random.random() * 3600)'
selecionará um minuto aleatório dentro da hora para suas tarefas de renovação.
O comando renew
para o Certbot verificará todos os certificados instalados no sistema e atualizará aqueles que estão prestes a expirar em menos de trinta dias. O parâmetro --quiet
instrui o Certbot a não exibir informações ou aguardar a entrada do usuário.
Mais informações detalhadas sobre a renovação podem ser encontradas na documentação do Certbot.
Conclusão
Neste guia, você instalou o cliente Let’s Encrypt Certbot, baixou certificados SSL para seu domínio e configurou a renovação automática do certificado. Se tiver dúvidas sobre o uso do Certbot, consulte a documentação oficial do Certbot.
Você também pode verificar o blog oficial do Let’s Encrypt para atualizações importantes de tempos em tempos.