Android

Securizați nginx cu ajutorul criptării pe linia debian 10

Setup Reverse Proxy on Synology NAS to host multiple Apps at home | 4K TUTORIAL

Setup Reverse Proxy on Synology NAS to host multiple Apps at home | 4K TUTORIAL

Cuprins:

Anonim

Let's Encrypt este o autoritate de certificare gratuită, automatizată și deschisă, dezvoltată de Grupul de cercetare în domeniul securității internetului (ISRG), care furnizează certificate SSL gratuite.

Certificatele emise de Let's Encrypt sunt de încredere de către toate browserele majore și sunt valabile timp de 90 de zile de la data emiterii.

Acest tutorial arată cum să instalați un certificat SSL gratuit Encrypt SSL pe Debian 10, Buster care rulează Nginx ca server web. Vom arăta, de asemenea, cum să configurați Nginx pentru a utiliza certificatul SSL și pentru a activa HTTP / 2.

Cerințe preliminare

Asigurați-vă că sunt îndeplinite următoarele cerințe înainte de a continua cu ghidul:

  • Conectat ca root sau utilizator cu privilegii sudo. Domeniul pentru care doriți să obțineți certificatul SSL trebuie să indice IP-ul serverului dvs. public. Vom folosi exemple.com. Nginx instalat.

Instalarea Certbot

Vom folosi instrumentul certbot pentru a obține și reînnoi certificatele.

Certbot este un instrument pe deplin și ușor de utilizat, care automatizează sarcinile pentru obținerea și reînnoirea certificatelor SSL Let's Encrypt și configurarea serverelor web pentru a utiliza certificatele.

Pachetul certbot este inclus în depozitele Debian implicite. Executați următoarele comenzi pentru a instala certbot:

sudo apt update sudo apt install certbot

Generarea grupului Dh (Diffie-Hellman)

Schimbul de chei Diffie – Hellman (DH) este o metodă de a schimba în siguranță cheile criptografice pe un canal de comunicare nesecurizat.

Vom genera un nou set de parametri DH de 2048 biți pentru a consolida securitatea:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

De asemenea, puteți modifica dimensiunea până la 4096 biți, dar generația poate dura mai mult de 30 de minute în funcție de entropia sistemului.

Obținerea unui certificat SSL Encrypt

Pentru a obține un certificat SSL pentru domeniu, vom folosi pluginul Webroot. Funcționează prin crearea unui fișier temporar pentru validarea domeniului solicitat în directorul ${webroot-path}/.well-known/acme-challenge . Serverul Let's Encrypt face solicitări HTTP la fișierul temporar pentru a valida dacă domeniul solicitat se rezolvă la serverul unde rulează certificbot.

Vom .well-known/acme-challenge toate cererile HTTP pentru .well-known/acme-challenge către un singur director, /var/lib/letsencrypt .

Executați următoarele comenzi pentru a crea directorul și a face să fie scris pentru serverul Nginx:

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

Pentru a evita duplicarea codului, vom crea două fragmente care vor fi incluse în toate fișierele de blocuri de server Nginx.

Deschideți editorul de text și creați primul fragment, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

Al doilea fragment ssl.conf include ssl.conf recomandate de Mozilla, permite OCSP Stapling, HTTP Strict Transport Security (HSTS) și aplică câteva anteturi HTTP concentrate pe securitate.

sudo nano /etc/nginx/snippets/ssl.conf /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

După ce ați terminat, deschideți fișierul de blocare a serverului de domeniu și includeți fragmentul letsencrypt.conf așa cum se arată mai jos:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Creați un link simbolic către directorul sites-enabled pentru sites-enabled pentru a activa blocul serverului de domeniu:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Reporniți serviciul Nginx pentru ca modificările să aibă efect:

sudo systemctl restart nginx

Acum sunteți gata să obțineți fișierele de certificat SSL rulând următoarea comandă:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Dacă certificatul SSL este obținut cu succes, următorul mesaj va fi tipărit pe terminalul dvs.:

IMPORTANT NOTES: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-02-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Editați blocul serverului de domeniu și includeți fișierele de certificat SSL după cum urmează:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

Configurația de mai sus spune Nginx să redirecționeze de la HTTP la HTTPS și de la www la versiunea non-www.

Reporniți sau reîncărcați serviciul Nginx pentru ca modificările să aibă efect:

sudo systemctl restart nginx

Deschideți site-ul dvs. utilizând https:// și veți observa o pictogramă de blocare verde.

Reînnoire automată Let's Encrypt SSL certificate

Certificatele Let's Encrypt sunt valabile 90 de zile. Pentru a reînnoi automat certificatele înainte de expirare, pachetul certbot creează un cronjob care rulează de două ori pe zi și reînnoiește automat orice certificat cu 30 de zile înainte de expirarea acestuia.

La reînnoire, serviciul nginx trebuie reîncărcat pentru ca serverul să încarce certificatul. Adăugați - --renew-hook "systemctl reload nginx" la fișierul /etc/cron.d/certbot astfel încât arată așa:

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Testați procesul de reînnoire automată, executând această comandă:

sudo certbot renew --dry-run

Dacă nu există erori, înseamnă că procesul de reînnoire a avut succes.

Concluzie

Posibilitatea unui certificat SSL este în prezent necesară. Securizează site-ul dvs. web, crește poziția de rang SERP și vă permite să activați HTTP / 2 pe serverul dvs. web.

În acest tutorial, v-am arătat cum puteți genera și reînnoi certificate SSL folosind scriptul certbot. De asemenea, v-am arătat cum puteți configura Nginx pentru a utiliza certificatele.

Pentru a afla mai multe despre Certbot, accesați documentația Certbot.

nginx debian hai să criptăm certbot ssl