Instale o certificado SSL Let's Encrypt para Nginx no RHEL 9/8
Neste artigo, orientaremos você sobre como gerar e instalar um certificado SSL/TLS obtido gratuitamente da Let's Encrypt Certificate Authority que usaremos para proteger transações HTTP do servidor web Nginx no RHEL e Distribuições baseadas em RHEL, como Fedora, Rocky Linux e AlmaLinux.
Se você deseja instalar o Let’s Encrypt para Apache no RHEL e em distribuições baseadas em RHEL, siga este guia abaixo:
Requisitos
- Um nome de domínio registrado com registros DNS
A
válidos para apontar para o endereço IP público do servidor. - Servidor web Nginx instalado com SSL habilitado e Virtual Hosts habilitados (somente para hospedagem de múltiplos domínios ou subdomínios).
Nossa configuração de ambiente de teste
Etapa 1: Instale o servidor Web Nginx em sistemas RHEL
1. Na primeira etapa, caso você não tenha o daemon Nginx já instalado, emita os comandos abaixo com privilégios de root para instalar o servidor web Nginx dos repositórios Epel.
------------- On RHEL, Rocky & AlmaLinux 9 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
------------- On RHEL, Rocky & AlmaLinux 8 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
------------- Install Nginx Web Server -------------
yum install nginx
Nota: Os usuários do Fedora não precisam instalar o repositório epel.
Etapa 2: Instale Let's Encrypt (Certbot) em sistemas RHEL
2. O método mais rápido de instalação do cliente Let's Encrypt em sistemas Linux é instalar os pacotes certbot e python3-certbot-nginx do repositório epel .
dnf install certbot python3-certbot-nginx
3. Após a instalação do cliente certbot, verifique a versão instalada do software Let’s Encrypt executando o comando abaixo:
certbot --version
certbot 1.30.0
Etapa 3: Obtenha um certificado SSL Let’s Encrypt gratuito para Nginx
4. O processo de obtenção de um Certificado SSL/TLS gratuito para Nginx será feito manualmente usando Let's Encrypt Standalone > plug-in.
Este método exige que a porta 80 esteja livre durante o tempo em que o cliente Let’s Encrypt valida a identidade do servidor e gera certificados.
Portanto, se o Nginx já estiver em execução, pare o daemon com o seguinte comando e execute o utilitário ss para confirmar que a porta 80 não está mais em uso na pilha de rede.
service nginx stop
systemctl stop nginx
ss -tln
5. Agora é hora de obter um certificado SSL gratuito da Let's Encrypt executando o comando certbot com --nginx
para inicializar a busca e configuração do certificado de segurança Let's Encrypt para domínios Nginx.
certbot --nginx
Or
certbot --nginx -d example.com -d www.example.com
6. Finalmente, se tudo correr como deveria, uma mensagem informativa de parabéns será mostrada em seu terminal bash. A mensagem também será exibida quando o certificado expirar.
Etapa 4: Instale o certificado SSL Vamos criptografar no Nginx
9. Agora que você possui um Certificado SSL/TLS gratuito, é hora de instalá-lo no servidor Nginx para que seu domínio possa usá-lo.
Todos os novos certificados SSL são colocados em /etc/letsencrypt/live/
em um diretório nomeado após o seu nome de domínio. Use o comando ls para listar os arquivos de certificado emitidos para o seu domínio e identificá-los.
sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/your_domain.tld
10. Para instalar os arquivos de certificado no Nginx e habilitar SSL, abra o arquivo /etc/nginx/nginx.conf
para edição e adicione as instruções abaixo após a última linha de escuta de bloco do servidor. Use a ilustração abaixo como guia.
vi /etc/nginx/nginx.conf
Trecho do bloco Nginx SSL:
SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
Substitua a string nome de domínio dos certificados SSL para que correspondam ao seu próprio domínio.
11. Por fim, reinicie o serviço Nginx e visite seu domínio via protocolo HTTPS em https://seudominio
. A página deve carregar sem problemas, sem nenhum erro de certificado.
systemctl restart nginx
service nginx restart
12. Para verificar o certificado SSL/TLS e sua veracidade visite o seguinte link:
https://www.ssllabs.com/ssltest/analyze.html
13. Caso você receba uma notificação de que seu servidor suporta uma troca de chaves DH fraca e uma classificação geral de grau B, gere um novo 13. Strong>Diffie-Hellman no diretório /etc/nginx/ssl/ para proteger seu servidor contra o ataque Logjam executando os seguintes comandos.
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096
Neste exemplo, usamos uma chave de 4096 bits, que na verdade leva muito tempo para ser gerada e coloca uma sobrecarga extra no seu servidor e no handshake SSL.
Caso não haja necessidade explícita de usar uma chave tão longa e você não esteja muito paranóico, você deve estar seguro com uma chave de 2048 bits.
14. Depois que a chave DH for gerada, abra o arquivo de configuração Nginx e adicione as instruções abaixo após a linha ssl_ciphers
para adicionar a chave DH e aumente o nível de segurança do seu domínio para uma nota A+
.
vi /etc/nginx/nginx.conf
Adicione o seguinte trecho de bloco ao Nginx.conf:
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;
15. Reinicie o serviço Nginx para aplicar as alterações e testar novamente seu certificado SSL limpando o cache de resultados anterior do link mencionado acima.
systemctl restart nginx
service nginx restart
Etapa 5: renovação automática Nginx grátis permite criptografar certificados SSL
16. Let’s Encrypt CA lança certificados SSL/TLS gratuitos válidos por 90 dias. Os certificados podem ser renovados manualmente e aplicados antes da expiração usando o plugin webroot, sem parar o seu servidor web, emitindo os comandos abaixo:
certbot --nginx -d example.com -d www.example.com
systemctl reload nginx
Ao executar o comando acima, certifique-se de substituir example.com
para corresponder ao seu domínio.
17. Para renovar automaticamente o certificado antes que ele expire, crie o cron job em um arquivo crontab existente.
crontab -e
Adicione o seguinte cron job na parte inferior do arquivo, que será executado todos os dias ao meio-dia para verificar a expiração do certificado e renová-lo. A opção --quiet
diz ao certbot para não gerar saída.
0 12 * * * /usr/bin/certbot renew --quiet
Isso é tudo! Agora, o servidor Nginx pode fornecer conteúdo da web seguro com um certificado SSL/TLS Let’s Encrypt gratuito em seu site.