Android

Securizează nginx cu ajutorul criptării pe Debian 9

Certbot + Nginx + TLS - Secure Your HTTP with Let's Encrypt

Certbot + Nginx + TLS - Secure Your HTTP with Let's Encrypt

Cuprins:

Anonim

Let's Encrypt este o autoritate de certificare gratuită și deschisă dezvoltată de Grupul de cercetare pentru securitatea internetului (ISRG). Certificatele emise de Let's Encrypt sunt astăzi de încredere de aproape toate browserele.

În acest tutorial, vă vom explica cum să folosiți instrumentul Certbot pentru a obține un certificat SSL gratuit pentru Nginx pe Debian 9. Vom arăta, de asemenea, cum să configurați Nginx pentru a utiliza certificatul SSL și a activa HTTP / 2.

Cerințe preliminare

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

  • Autentificat ca utilizator cu privilegii sudo. Aveți un nume de domeniu îndreptat către IP-ul serverului dvs. public. Vom folosi exemple.com. Aveți Nginx instalat urmând aceste instrucțiuni Aveți un bloc de server pentru domeniul dvs. Puteți urma aceste instrucțiuni pentru detalii despre crearea unuia.

Instalați Certbot

Certbot este un instrument complet dotat și ușor de utilizat, care poate automatiza 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.

Actualizați lista de pachete și instalați pachetul certbot:

sudo apt update sudo apt install certbot

Generați grupul puternic 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 Dacă doriți, puteți modifica dimensiunea până la 4096 biți, dar în acest caz, 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 domeniul nostru, vom folosi pluginul Webroot care 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 .

Următoarele comenzi vor crea directorul și îl vor putea scrie 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, creați următoarele două fragmente care vor fi incluse în toate fișierele noastre 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; }

Creați cel de-al doilea fragment ssl.conf care include cipitoarele recomandate de Mozilla, permite OCSP Stapling, HTTP Strict Transport Security (HSTS) și aplică puține anteturi HTTP centrate 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 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; 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=15768000; includeSubdomains; preload"; 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; }

Activați noul bloc de server creând o legătură simbolică către directorul sites-enabled pentru sites-enabled :

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 puteți rula Certbot cu plugin-ul webroot și puteți obține fișierele de certificare SSL prin emiterea:

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: - 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 2018-07-28. 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" - 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:

Apoi, editați blocul serverului de domeniu 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 }

Cu configurația de mai sus, forțăm HTTPS și redirecționăm de la www la versiunea non-www.

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

sudo systemctl reload nginx

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.

Deoarece folosim plug-in-ul webroot certbot odată ce certificatul este reînnoit, trebuie să reîncărcăm serviciul nginx. 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, ați folosit clientul Encrypt, certificbot pentru a genera certificate SSL pentru domeniul dvs. De asemenea, ați creat fragmente Nginx pentru a evita duplicarea codului și ați configurat Nginx pentru a utiliza certificatele. La sfârșitul tutorialului ați creat un cronjob pentru reînnoirea automată a certificatelor.

nginx debian hai să criptăm certbot ssl

Această postare este o parte din Cum să instalați LEMP Stack pe seria Debian 9.

Alte postări din această serie:

• Cum se instalează MariaDB pe Ubuntu 18.04 • Cum se instalează Nginx pe Debian 9 • Cum se instalează PHP pe Debian 9 • Cum se configurează blocurile Nginx Server pe Debian 9 • Securizarea Nginx cu ajutorul criptării pe Debian 9