Cum să securizați Nginx cu Let's Encrypt pe Ubuntu și Debian


În urma tutorialului anterior Let's Encrypt referitor la Apache SSL, în acest articol vom discuta despre cum să generați și să instalați un certificat SSL/TLS gratuit emis de Let's Encrypt CA. pentru serverul web Nginx pe Ubuntu sau Debian.

Citește și
  1. Securizează Apache cu Let’s Encrypt gratuit pe Ubuntu și Debian
  2. Instalați Let’s Encrypt SSL pentru a securiza Apache pe RHEL și CentOS
Testarea mediului de probă

Cerințe

  1. Un domeniu înregistrat cu înregistrări DNS valide A care indică înapoi la adresa IP a serverului dvs.
  2. Un server web Nginx instalat cu SSL și Vhost activate, în cazul în care intenționați să găzduiți mai multe domenii sau subdomenii.

Pasul 1: Instalarea serverului web Nginx

1. La primul pas, instalați serverul web Nginx, dacă nu este deja instalat, lansând comanda de mai jos:

sudo apt-get install nginx

Pasul 2: Generați un certificat SSL Let’s Encrypt pentru Nginx

2. Înainte de a genera un certificat SSL/TLS gratuit, instalați software-ul Let's Encrypt în ierarhia sistemului de fișiere /usr/local/ cu ajutorul >git client lansând comenzile de mai jos:

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

3. Deși procedura de obținere a unui certificat pentru Nginx este automatizată, puteți totuși să creați și să instalați manual un certificat SSL gratuit pentru Nginx utilizând pluginul Let’s Encrypt Standalone.

Această metodă necesită ca portul 80 să nu fie utilizat pe sistemul dumneavoastră pentru o perioadă scurtă de timp, în timp ce clientul Let’s Encrypt validează identitatea serverului înainte de a genera certificatul.

În cazul în care rulați deja Nginx, opriți serviciul lansând următoarea comandă.


sudo service nginx stop
OR
sudo systemctl stop nginx

În cazul în care rulați alt serviciu care se leagă pe portul 80, opriți și acel serviciu.

4. Confirmați că portul 80 este liber executând comanda netstat:

sudo netstat -tlpn | grep 80

5. Acum este timpul să rulați letsencrypt pentru a obține un certificat SSL. Accesați directorul de instalare Let's Encrypt găsit în calea sistemului /usr/local/letsencrypt și rulați comanda letsencrypt-auto furnizând certonly --standalone și marcajul -d pentru fiecare domeniu sau subdomeniu pentru care doriți să generați un certificat.

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

6. Introduceți adresa de e-mail care va fi folosită de Let’s Encrypt pentru recuperarea cheii pierdute sau notificări urgente.

7. Acceptați termenii licenței apăsând tasta Enter.

8. În cele din urmă, dacă totul a decurs cu succes, pe consola terminalului ar trebui să apară un mesaj similar cu captura de ecran de mai jos.

Pasul 3: Instalați Let’s Encrypt SSL Certificate în Nginx

9. Acum, că certificatul dvs. SSL a fost generat, este timpul să configurați serverul web Nginx să-l folosească. Noile certificate SSL sunt plasate în /etc/letsencrypt/live/ sub un director numit după numele dvs. de domeniu. Rulați comanda ls pentru a lista fișierele certificate emise pentru domeniul dvs.

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

10. Apoi, deschideți fișierul /etc/nginx/sites-available/default cu un editor de text și adăugați următorul bloc după prima linie comentată care specifică începutul Bloc SSL. Utilizați captura de ecran de mai jos ca ghid.

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

Extras bloc 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;

Înlocuiți în consecință valorile numelui de domeniu pentru certificatele SSL.

11. La pasul următor, generați un cifr Diffie-Hellman puternic în directorul /etc/nginx/ssl/ pentru a vă proteja serverul împotriva atacul Logjam rulând următoarele comenzi.

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

12. În cele din urmă, reporniți demonul Nginx pentru a reflecta modificările.

sudo systemctl restart nginx

și testați-vă certificatul SSL vizitând adresa URL de mai jos.

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

Pasul 4: Reînnoire automată Să criptăm certificatele Nginx

13. Certificatele emise de Let’s Encrypt CA sunt valabile 90 de zile. Pentru a reînnoi automat fișierele înainte de data de expirare, creați scriptul bash ssl-renew.sh în directorul /usr/local/bin/ cu următorul conținut.

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

Adăugați următorul conținut în fișierul 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

Înlocuiți variabila --webroot-path pentru a se potrivi cu rădăcina documentului dvs. Nginx. Asigurați-vă că scriptul este executabil lansând următoarea comandă.

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

14. În cele din urmă, adăugați o lucrare cron pentru a rula scriptul la fiecare două luni la miezul nopții, pentru a vă asigura că certificatul dvs. va fi actualizat în aproximativ 30 de zile înainte de expirare.

sudo crontab -e

Adăugați următoarea linie în partea de jos a fișierului.

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

Asta este! Serverul dvs. Nginx oferă acum conținut SSL folosind un certificat gratuit Let’s Encrypt SSL.