Protejer o Nginx com o Let’s Encrypt no Debian 10

Escrito por

em

,

Let’s Encrypt é uma autoridade de certificação (CA) que fornece uma maneira direta de obter e instalar certificados TLS / SSL gratuitos, possibilitando HTTPS criptografado em servidores da de páginas web.

Pré-requisitos

  • Debian 10 server. (tutorial pendente)
  • Um nome de domínio registado. Podem fazê-lo em registrars como o dns.pt. (tutorial pendente)
  • Registos dos DNS configurados para o teu servidor. (tutorial pendente)
  • Nginx instalado. Segui a primeira parte da instalação no link a seguir (Instalar Linux, Nginx, MariaDB, PHP (LEMP stack) no Debian 10).

1 – Instalar o Certbot

Atualizar a lista de pacotes entes de qualquer instalação:

sudo apt update

Instalar o pacote python3-certbot-nginx, se tudo correr normal, os pacotes dependentes também serão instalados:

sudo apt install python3-certbot-nginx

Pergunta se queremos instalar o pacote e dependencias, clicamos em <enter>.

O Certbot está pronto para ser usado, mas para configurar o SSL no Nginx, precisamos verificar algumas das configurações do Nginx.

2 – Verificar configuraçães do Nginx

Se o nginx estiver configurado como diz no tutorial colocado em pré-requisitos, devemos ter a configuração com caminho “/etc/nginx/sites-available/o.teu.dominio“. Para verificar e se necessário alterar, fazer:

sudo nano /etc/nginx/sites-available/o.teu.dominio

É apresentado o editor de ficheiros “nano” com o conteúdo do caminho colocado à frente do nome do editor.

Encontrar a linha com a diretiva “server_name” e verificar se tem os domínios corrects que queremos usar como nomes comuns nos certificados.

#...outras diretivas e programas antes
server_name o.teu.dominio www.o.teu.dominio;
#...outras diretivas e programas depois

Se está correto só é necessário fechar com “ctrl+x” no teclado. Caso os domínios não forem os corretos, proceder com as alterações e guardar e fechar com “ctrl+x” carregar em “Y” ou “S” (depende da configuração da linguagem) e então carregar em <enter> para guardar no caminho apresentado.

Testar a configuração:

sudo nginx -t

Se as mensagens apresentarem erros, fazer verificação do ficheiro de configuração. Caso apresente configuração com sucesso proceder ao reinício do serviço nginx:

sudo systemctl reload nginx

Com esta configuração o Certbot pode encontrar o bloco de servidor correto e atualizá-lo. Que será o próximo passo.

Nota: a esta altura já deveríamos ter a firewall do servidor configurada para permitir tráfego seguro, porta 443. Caso não esteja, fazer as alterações necessárias que podem ver na ligação que está em pré.requisitos na instalação do nginx.

3 – Obter o certificado SSL

O Certbot tem a possibilidade de obter certificados através de plugins (software adicional). O plugin do nginx “--nginx” toma conta da configuração dos certificados no(s) servidor(s) que correspondem aos domínios colocados em argumento (“-d“) e faz o reinício do servidor, se necessário, como vamos poder ver a seguir:

sudo certbot --nginx -d o.teu.dominio -d www.o.teu.dominio -d outros.dominios.se.necessario

Se tivermos sucesso, o Certbot perguntará como desejamos definir as configurações de HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Se estamos aqui é porque não estamos muito acostumados com a criação de certificados ou porque o queremos fazer de forma mais rápida. Sendo assim a resposta será a “2” e pressionamos <enter> . Se tudo funcionar bem iremos obter algo como:

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/o.teu.dominio
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/o.teu.dominio
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/o.teu.dominio
nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://o.teu.dominio,
https://www.o.teu.dominio, and https://outros.dominios.se.necessario

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=o.teu.dominio
https://www.ssllabs.com/ssltest/analyze.html?d=www.o.teu.dominio
https://www.ssllabs.com/ssltest/analyze.html?d=outros.dominios.se.necessario
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/o.teu.dominio/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/o.teu.dominio/privkey.pem
   Your cert will expire on 2020-03-05. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Nota: Se o nosso servidor estiver com um certificado auto-assinado, pode aparecer uma aviso que será ignorado mas devemos comentá-las:

sudo nano /etc/nginx/sites-available/o.teu.dominio

Colocar um “#” antes das linhas “include snippets/auto-assinado.conf;”  e  “include snippets/ssl-params.conf;” e passam a ser ignoradas:

#...    
#include snippets/auto-assinado.conf;
#include snippets/ssl-params.conf;
#...

Guardar e fechar com “ctrl+x” carregar em “Y” ou “S” (depende da configuração da linguagem) e carregar em <enter> para guardar no caminho apresentado. Testar com:

sudo nginx -t

Reiniciar o servidor:

sudo systemctl reload nginx

Neste momento já devemos ter uma página com certificado Let’s Encrypt válido por 90 días e com o programados de tarefas “cron” configurado para que seja feita a renovação. Para verificar , fazer:

cat /etc/cron.d/certbot

Até à próxima…