Pesquisa de site

Como proteger o Nginx com Let's Encrypt no Ubuntu e Debian


Seguindo o tutorial anterior Let's Encrypt sobre Apache SSL, neste artigo discutiremos como gerar e instalar um certificado SSL/TLS gratuito emitido por Let's Encrypt CA para servidor web Nginx em Ubuntu ou Debian.

Leia também
  1. Proteja o Apache com Let’s Encrypt grátis no Ubuntu e Debian
  2. Instale Let's Encrypt SSL para proteger o Apache no RHEL e CentOS
Testando Ambiente de Amostra

Requisitos

  1. Um domínio registrado com registros DNS A válidos para apontar para o endereço IP do seu servidor.
  2. Um servidor web Nginx instalado com SSL e Vhost habilitados, caso você planeje hospedar vários domínios ou subdomínios.

Etapa 1: Instalando o servidor Web Nginx

1. Na primeira etapa, instale o servidor web Nginx, se ainda não estiver instalado, emitindo o comando abaixo:

sudo apt-get install nginx

Etapa 2: gerar um certificado SSL Let’s Encrypt para Nginx

2. Antes de gerar um certificado SSL/TLS gratuito, instale o software Let's Encrypt na hierarquia do sistema de arquivos /usr/local/ com a ajuda de git emitindo os comandos abaixo:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Embora o procedimento de obtenção de um certificado para Nginx seja automatizado, você ainda pode criar e instalar manualmente um certificado SSL gratuito para Nginx usando o plugin Let’s Encrypt Standalone.

Este método exige que a porta 80 não esteja em uso em seu sistema por um curto período de tempo enquanto o cliente Let’s Encrypt valida a identidade do servidor antes de gerar o certificado.

Caso você já esteja executando o Nginx, interrompa o serviço emitindo o seguinte comando.


sudo service nginx stop
OR
sudo systemctl stop nginx

Caso você esteja executando outro serviço vinculado à porta 80, interrompa esse serviço também.

4. Confirme se a porta 80 está livre executando o comando netstat:

sudo netstat -tlpn | grep 80

5. Agora é hora de executar letsencrypt para obter um certificado SSL. Vá para o diretório de instalação Let's Encrypt encontrado no caminho do sistema /usr/local/letsencrypt e execute o comando letsencrypt-auto fornecendo o certonly --standalone e sinalizador -d para cada domínio ou subdomínio que você deseja gerar um certificado.

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. Insira o endereço de e-mail que será usado pelo Let’s Encrypt para recuperação de chave perdida ou avisos urgentes.

7. Concorde com os termos da licença pressionando a tecla Enter.

8. Finalmente, se tudo correr bem, uma mensagem semelhante à imagem abaixo deverá aparecer no console do seu terminal.

Etapa 3: Instale o certificado SSL Vamos criptografar no Nginx

9. Agora que seu certificado SSL foi gerado, é hora de configurar o servidor Nginx para usá-lo. Os novos certificados SSL são colocados em /etc/letsencrypt/live/ em um diretório nomeado após o seu nome de domínio. Execute o comando ls para listar os arquivos de certificado emitidos para o seu domínio.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. Em seguida, abra o arquivo /etc/nginx/sites-available/default com um editor de texto e adicione o seguinte bloco após a primeira linha comentada que especifica o início do Bloco SSL. Use a captura de tela abaixo como orientação.

sudo nano /etc/nginx/sites-enabled/default

Trecho do bloco Nginx:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

Substitua os valores de nome de domínio para certificados SSL adequadamente.

11. Na próxima etapa, gere uma cifra Diffie-Hellman forte no diretório /etc/nginx/ssl/ para proteger seu servidor contra o ataque Logjam executando os seguintes comandos.

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048

12. Por fim, reinicie o daemon Nginx para refletir as alterações.

sudo systemctl restart nginx

e teste seu certificado SSL visitando o URL abaixo.

https://www.ssllabs.com/ssltest/analyze.html

Etapa 4: renovação automática, vamos criptografar certificados Nginx

13. Os certificados emitidos pela Let’s Encrypt CA são válidos por 90 dias. Para renovar automaticamente os arquivos antes da data de expiração, crie o script bash ssl-renew.sh no diretório /usr/local/bin/ com o seguinte conteúdo.

sudo nano /usr/local/bin/ssl-renew.sh

Adicione o seguinte conteúdo ao arquivo ssl-renew.sh.

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

Substitua a variável --webroot-path para corresponder à raiz do seu documento Nginx. Certifique-se de que o script seja executável emitindo o seguinte comando.

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. Por fim, adicione um cron job para executar o script a cada dois meses à meia-noite para garantir que seu certificado será atualizado em aproximadamente 30 dias antes de expirar.

sudo crontab -e

Adicione a seguinte linha na parte inferior do arquivo.

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

É isso! Seu servidor Nginx agora está servindo conteúdo SSL usando um certificado Let’s Encrypt SSL gratuito.