Introdução
O Let’s Encrypt é uma Autoridade de Certificação (CA) que fornece uma maneira acessível de obter e instalar certificados TLS/SSL gratuitos, permitindo assim o HTTPS criptografado em servidores web. Simplifica o processo fornecendo um cliente de software, 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 de servidor Nginx separado em vez do arquivo padrão. Você deve criar novos arquivos de bloco de servidor Nginx para cada domínio porque 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 configuração inicial do servidor Rocky Linux 9, incluindo um usuário sudo habilitado que não seja root e um firewall.
-
Um nome de domínio registrado. Este tutorial utilizará
example.com
como exemplo. Você pode adquirir um nome de domínio na Namecheap, obter um gratuitamente com o Freenom, ou usar o registrador de domínios de sua preferência. -
Ambos os seguintes registros DNS configurados para o seu servidor. Se estiver usando 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 seu domínio. Este tutorial usará
/etc/nginx/sites-available/example.com
como exemplo.
Passo 1 — Instalando o Certbot
Primeiro, você precisa instalar o pacote de software certbot
. Faça login em 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 pelo gerenciador de pacotes por padrão. 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 extra, instale todos os pacotes necessários:
- sudo dnf install certbot python3-certbot-nginx
Isso instalará o Certbot em si e o plugin Nginx para o Certbot, que é necessário para executar o programa.
O processo de instalação solicitará a importação de uma chave GPG. Confirme para que a instalação possa ser concluída.
Agora que o Certbot está instalado, vamos executá-lo para obter um certificado.
Etapa 2 — Confirmando a Configuração do Nginx
O Certbot precisa ser capaz de encontrar o bloco server
correto em sua configuração do Nginx para poder configurar automaticamente o SSL. Especificamente, ele faz isso procurando por uma diretiva server_name
que corresponda ao domínio para o qual você está solicitando um certificado.
Se você seguiu a etapa de configuração do bloco do servidor no tutorial de instalação do Nginx, você deve ter um bloco de servidor para seu domínio em /etc/nginx/conf.d/exemplo.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
. Deverá se parecer com isso:
...
server_name example.com www.example.com;
...
Se estiver correto, saia do editor e siga para a próxima etapa.
Se não estiver, atualize para que corresponda. Em seguida, salve o arquivo, saia do editor e verifique a sintaxe das suas edições de configuração:
- sudo nginx -t
Se ocorrer um erro, reabra o arquivo de bloco do servidor e verifique se há erros de digitação ou caracteres ausentes. Uma vez que a sintaxe do seu arquivo de configuração estiver 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
Dado que sua configuração prévia permite o uso do firewalld
, será necessário 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, será necessário recarregar o serviço de firewall:
- sudo firewall-cmd --reload
Agora que você abriu seu servidor para o tráfego https, está pronto para executar o Certbot e obter 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, será solicitado que você insira um endereço de email e concorde 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 do 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. Deverá indicar que o site está devidamente protegido, geralmente com um ícone de cadeado. Se você testar seu servidor usando o SSL Labs Server Test, ele receberá uma nota A.
Vamos terminar testando o processo de renovação.
Etapa 5 — Verificando a Renovação Automática do Certbot
Os certificados Let’s Encrypt são válidos por 90 dias, mas é recomendável renová-los a cada 60 dias para permitir uma margem de erro. O cliente Certbot Let’s Encrypt possui um comando renew
que verifica automaticamente os certificados instalados no momento e tenta renová-los se estiverem a menos de 30 dias da data de expiração.
Você pode testar a renovação automática para seus certificados executando este comando:
- sudo certbot renew --dry-run
O resultado será semelhante a este:
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 no resultado, 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 ponto. 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, depois :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á qualquer um que esteja prestes a expirar em menos de trinta dias. O --quiet
instrui o Certbot a não exibir informações ou esperar por entrada do usuário.
Mais informações detalhadas sobre 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 alguma dúvida sobre o uso do Certbot, você pode consultar 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.