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
- Proteja o Apache com Let’s Encrypt grátis no Ubuntu e Debian
- Instale Let's Encrypt SSL para proteger o Apache no RHEL e CentOS
Testando Ambiente de Amostra
Requisitos
- Um domínio registrado com registros DNS
A
válidos para apontar para o endereço IP do seu servidor. - 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.