Android

Säkra nginx med låt oss kryptera på debian 9

#14 Настройка воркеров Nginx и другие полезные директивы

#14 Настройка воркеров Nginx и другие полезные директивы

Innehållsförteckning:

Anonim

Let's Encrypt är en fri och öppen certifikatutfärdare utvecklad av Internet Security Research Group (ISRG). Certifikat som utfärdas av Let's Encrypt litar på nästan alla webbläsare idag.

I den här tutorialen kommer vi att förklara hur man använder Certbot-verktyget för att få ett gratis SSL-certifikat för Nginx på Debian 9. Vi kommer också att visa hur man konfigurerar Nginx för att använda SSL-certifikatet och aktivera HTTP / 2.

förutsättningar

Se till att följande förutsättningar uppfylls innan du fortsätter med denna handledning:

  • Loggat in som användare med sudo-privilegier. Har ett domännamn som pekar på din offentliga server-IP. Vi använder exempel.com. Har Nginx installerat genom att följa dessa instruktioner Du har ett serverblock för din domän. Du kan följa dessa instruktioner för information om hur du skapar en.

Installera Certbot

Certbot är ett fullt utrustat och lättanvänt verktyg som kan automatisera uppgifterna för att få och förnya Let's Encrypt SSL-certifikat och konfigurera webbservrar för att använda certifikaten. Certbot-paketet ingår i Debians standardförvar.

Uppdatera paketlistan och installera certbot-paketet:

sudo apt update sudo apt install certbot

Generera Strong Dh (Diffie-Hellman) -gruppen

Diffie – Hellman nyckelutbyte (DH) är en metod för att säkert utbyta kryptografiska nycklar över en osäker kommunikationskanal. Vi kommer att generera en ny uppsättning 2048-bitars DH-parametrar för att stärka säkerheten:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Om du vill kan du ändra storleken upp till 4096 bitar, men i så fall kan generationen ta mer än 30 minuter beroende på systemets entropi.

Få ett SSL-certifikat för Let's Encrypt

För att få ett SSL-certifikat för vår domän kommer vi att använda Webroot-plugin som fungerar genom att skapa en tillfällig fil för validering av den begärda domänen i ${webroot-path}/.well-known/acme-challenge katalogen. Let's Encrypt-servern gör HTTP-förfrågningar till den tillfälliga filen för att bekräfta att den begärda domänen löses till servern där certbot körs.

Vi kommer att kartlägga alla HTTP-förfrågningar för .well-known/acme-challenge till en enda katalog, /var/lib/letsencrypt .

Följande kommandon skapar katalogen och gör den skrivbar för Nginx-servern.

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

För att undvika kopiering av kod skapar du följande två utdrag som kommer att ingå i alla våra Nginx-serverblockfiler.

Öppna din textredigerare och skapa det första utdraget, 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; }

Skapa det andra ssl.conf som inkluderar ssl.conf som rekommenderas av Mozilla, aktiverar OCSP-häftning, HTTP Strict Transport Security (HSTS) och upprätthåller få säkerhetsfokuserade

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;

När du är klar öppnar du blockeringsfilen för domänservern och inkluderar letsencrypt.conf som visas nedan:

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

Aktivera det nya serverblocket genom att skapa en symbolisk länk till den sites-enabled katalogen:

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

Starta om Nginx-tjänsten så att ändringarna träder i kraft:

sudo systemctl restart nginx

Du kan nu köra Certbot med webroot-plugin och få SSL-certifikatfiler genom att utfärda:

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

Om SSL-certifikatet framgångsrikt erhålls kommer följande meddelande att skrivas ut på din terminal:

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:

Redigera sedan domänserverblocket enligt följande:

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 }

Med konfigurationen ovan tvingar vi HTTPS och omdirigerar från www till icke-www version.

Ladda om Nginx-tjänsten så att ändringarna träder i kraft:

sudo systemctl reload nginx

Automatisk förnyelse av Let's Encrypt SSL-certifikat

Let's Encrypts certifikat är giltiga i 90 dagar. För att automatiskt förnya certifikaten innan de löper ut, skapar certbot-paketet en cronjob som körs två gånger om dagen och automatiskt förnyar alla certifikat 30 dagar innan det löper ut.

Eftersom vi använder certbot webroot plug-in när certifikatet har förnyats måste vi också ladda om nginx-tjänsten. Lägg till --renew-hook "systemctl reload nginx" till filen /etc/cron.d/certbot så det ser ut så här:

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 den automatiska förnyelseprocessen genom att köra det här kommandot:

sudo certbot renew --dry-run

Om det inte finns några fel betyder det att förnyelseprocessen var framgångsrik.

Slutsats

Att ha ett SSL-certifikat är ett måste nuförtiden. Det säkrar din webbplats, ökar SERP-rankingpositionen och låter dig aktivera HTTP / 2 på din webbserver.

I den här tutorialen använde du Let's Encrypt-klienten, certbot för att generera SSL-certifikat för din domän. Du har också skapat Nginx-kodavsnitt för att undvika kopiering av kod och konfigurerat Nginx för att använda certifikaten. I slutet av självstudien har du skapat en cronjob för automatisk förnyelse av certifikat.

nginx debian låt oss kryptera certbot ssl

Det här inlägget är en del av hur man installerar LEMP Stack i Debian 9-serien.

Andra inlägg i denna serie:

• Hur man installerar MariaDB på Ubuntu 18.04 • Hur man installerar Nginx på Debian 9 • Hur man installerar PHP på Debian 9 • Hur man installerar Nginx-serverblock på Debian 9 • Säkra Nginx med Let's Encrypt på Debian 9