Android

Beveilig nginx met laten we coderen op debian 9

#15 Динамические модули Nginx

#15 Динамические модули Nginx

Inhoudsopgave:

Anonim

Let's Encrypt is een gratis en open certificaatautoriteit ontwikkeld door de Internet Security Research Group (ISRG). Certificaten uitgegeven door Let's Encrypt worden tegenwoordig door bijna alle browsers vertrouwd.

In deze zelfstudie leggen we uit hoe u de Certbot-tool kunt gebruiken om een ​​gratis SSL-certificaat voor Nginx op Debian 9 te verkrijgen. We zullen ook laten zien hoe u Nginx configureert om het SSL-certificaat te gebruiken en HTTP / 2 in te schakelen.

voorwaarden

Zorg ervoor dat aan de volgende voorwaarden is voldaan voordat u doorgaat met deze zelfstudie:

  • Ingelogd als een gebruiker met sudo-rechten. Heb een domeinnaam die naar uw openbare server-IP verwijst. We zullen example.com Heb Nginx geïnstalleerd door deze instructies te volgen. U hebt een serverblok voor uw domein. U kunt deze instructies volgen voor details over hoe u er een maakt.

Certbot installeren

Certbot is een volledig functionele en eenvoudig te gebruiken tool die de taken kan automatiseren voor het verkrijgen en vernieuwen van Let's Encrypt SSL-certificaten en het configureren van webservers om de certificaten te gebruiken. Het certbot-pakket is inbegrepen in de standaard Debian-opslagplaatsen.

Werk de pakkettenlijst bij en installeer het certbot-pakket:

sudo apt update sudo apt install certbot

Genereer Strong Dh (Diffie-Hellman) Group

Diffie-Hellman-sleuteluitwisseling (DH) is een methode voor het veilig uitwisselen van cryptografische sleutels via een onbeveiligd communicatiekanaal. We gaan een nieuwe set 2048 bit DH-parameters genereren om de beveiliging te versterken:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Als u wilt, kunt u de grootte wijzigen tot 4096 bits, maar in dat geval kan het genereren meer dan 30 minuten duren, afhankelijk van de entropie van het systeem.

Het verkrijgen van een Let's Encrypt SSL-certificaat

Om een ​​SSL-certificaat voor ons domein te verkrijgen, gaan we de Webroot-plug-in gebruiken die werkt door een tijdelijk bestand te maken voor het valideren van het aangevraagde domein in de ${webroot-path}/.well-known/acme-challenge . De Let's Encrypt-server doet HTTP-aanvragen bij het tijdelijke bestand om te valideren dat het aangevraagde domein wordt opgelost naar de server waarop certbot wordt uitgevoerd.

We gaan alle HTTP-aanvragen voor .well-known/acme-challenge /var/lib/letsencrypt aan een enkele map, /var/lib/letsencrypt .

De volgende opdrachten maken de map en maken deze beschrijfbaar voor de Nginx-server.

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

Om dubbele code te voorkomen, maakt u de volgende twee fragmenten die worden opgenomen in al onze Nginx-serverblokbestanden.

Open uw teksteditor en maak het eerste 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; }

Maak het tweede fragment ssl.conf dat de chippers bevat die worden aanbevolen door Mozilla, OCSP-nieten, HTTP Strict Transport Security (HSTS) mogelijk maakt en weinig op beveiliging gerichte HTTP-headers afdwingt.

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;

Zodra u klaar bent, opent u het blokbestand van de letsencrypt.conf en neemt u het letsencrypt.conf fragment op zoals hieronder wordt weergegeven:

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; }

Schakel het nieuwe serverblok in door een symbolische koppeling te maken naar de directory met sites-enabled :

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

Start de Nginx-service opnieuw om de wijzigingen van kracht te laten worden:

sudo systemctl restart nginx

U kunt Certbot nu uitvoeren met de webroot-plug-in en de SSL-certificaatbestanden verkrijgen door het uitgeven van:

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

Als het SSL-certificaat met succes is verkregen, wordt het volgende bericht op uw terminal afgedrukt:

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:

Bewerk vervolgens het domein-serverblok als volgt:

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 }

Met de bovenstaande configuratie dwingen we HTTPS en verwijzen we door van www naar een niet-www-versie.

Laad de Nginx-service opnieuw om de wijzigingen door te voeren:

sudo systemctl reload nginx

Automatisch vernieuwen Let's Encrypt SSL-certificaat

De certificaten van Let's Encrypt zijn 90 dagen geldig. Om de certificaten automatisch te verlengen voordat ze verlopen, maakt het certbot-pakket een cronjob die twee keer per dag wordt uitgevoerd en automatisch elk certificaat 30 dagen vóór het verlopen vernieuwt.

Omdat we de certbot webroot-plug-in gebruiken zodra het certificaat is vernieuwd, moeten we ook de nginx-service opnieuw laden. Voeg --renew-hook "systemctl reload nginx" aan het bestand --renew-hook "systemctl reload nginx" zodat het er zo uitziet:

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"

Test het automatische verlengingsproces door deze opdracht uit te voeren:

sudo certbot renew --dry-run

Als er geen fouten zijn, betekent dit dat het vernieuwingsproces succesvol was.

Conclusie

Het hebben van een SSL-certificaat is tegenwoordig een must. Het beveiligt uw website, verhoogt de SERP-positie en stelt u in staat HTTP / 2 op uw webserver in te schakelen.

In deze zelfstudie hebt u de Let's Encrypt-client, certbot, gebruikt om SSL-certificaten voor uw domein te genereren. U hebt ook Nginx-fragmenten gemaakt om dubbele code te voorkomen en Nginx geconfigureerd om de certificaten te gebruiken. Aan het einde van de zelfstudie hebt u een cronjob ingesteld voor automatische certificaatverlenging.

nginx debian laten we certbot ssl coderen

Dit bericht maakt deel uit van de LEMP Stack installeren op Debian 9-serie.

Andere berichten in deze serie:

• Hoe MariaDB op Ubuntu 18.04 te installeren • Hoe Nginx op Debian 9 te installeren • Hoe PHP op Debian 9 te installeren • Hoe Nginx serverblokken op Debian 9 in te stellen • Nginx beveiligen met Let's Encrypt op Debian 9