Android

Sikre nginx med la oss kryptere på debian 9

Sarah Novotny (NGINX) Interviewed - Velocity NY 2014

Sarah Novotny (NGINX) Interviewed - Velocity NY 2014

Innholdsfortegnelse:

Anonim

Let's Encrypt er en gratis og åpen sertifikatmyndighet utviklet av Internet Security Research Group (ISRG). Sertifikater utstedt av Let's Encrypt er klarert av nesten alle nettlesere i dag.

I denne opplæringen vil vi forklare hvordan du bruker Certbot-verktøyet for å skaffe et gratis SSL-sertifikat for Nginx på Debian 9. Vi vil også vise hvordan du konfigurerer Nginx til å bruke SSL-sertifikatet og aktivere HTTP / 2.

Forutsetninger

Forsikre deg om at følgende forutsetninger er oppfylt før du fortsetter med denne opplæringen:

  • Logget inn som bruker med sudo-rettigheter. Har et domenenavn som peker til din offentlige server-IP. Vi bruker example.com Har Nginx installert ved å følge disse instruksjonene. Du har en serverblokk for domenet ditt. Du kan følge disse instruksjonene for informasjon om hvordan du oppretter en.

Installer Certbot

Certbot er et fullt utstyrt og brukervennlig verktøy som kan automatisere oppgavene for å skaffe og fornye Let's Encrypt SSL-sertifikater og konfigurere webservere til å bruke sertifikatene. Certbot-pakken er inkludert i standard Debian-lagringene.

Oppdater pakkelisten og installer certbot-pakken:

sudo apt update sudo apt install certbot

Generer Strong Dh (Diffie-Hellman) -gruppen

Diffie – Hellman nøkkelutveksling (DH) er en metode for sikker utveksling av kryptografiske nøkler over en usikret kommunikasjonskanal. Vi kommer til å generere et nytt sett med 2048 bit DH-parametere for å styrke sikkerheten:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Hvis du vil, kan du endre størrelsen opp til 4096 biter, men i så fall kan generasjonen ta mer enn 30 minutter avhengig av systemets entropi.

Innhenting av et Let's Encrypt SSL-sertifikat

For å få et SSL-sertifikat for domenet vårt, bruker vi Webroot-plugin som fungerer ved å lage en midlertidig fil for å validere det forespurte domenet i ${webroot-path}/.well-known/acme-challenge katalogen. Let's Encrypt-serveren sender HTTP-forespørsler til den midlertidige filen for å bekrefte at det forespurte domenet løses til serveren der certbot kjører.

Vi skal kartlegge alle HTTP-forespørsler for. .well-known/acme-challenge til en enkelt katalog, /var/lib/letsencrypt .

Følgende kommandoer lager katalogen og gjør den skrivbar for Nginx-serveren.

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

For å unngå duplisering av kode, opprett følgende to kodebiter som vil bli inkludert i alle Nginx-serverblokkfilene.

Åpne teksteditoren din, og lag den første kodebiten, 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; }

Lag det andre snippet ssl.conf som inkluderer flishuggerne som er anbefalt av Mozilla, aktiverer OCSP-stifting, HTTP Strict Transport Security (HSTS) og håndhever få sikkerhetsfokuserte

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 er ferdig, åpner du domeneserverblokkfilen og inkluderer letsencrypt.conf utdraget som vist nedenfor:

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

Aktiver den nye serverblokken ved å opprette en symbolsk lenke til den sites-enabled katalogen:

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

Start Nginx-tjenesten på nytt for at endringene skal tre i kraft:

sudo systemctl restart nginx

Du kan nå kjøre Certbot med webroot-plugin og få tak i SSL-sertifikatfilene ved å utstede:

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

Hvis SSL-sertifikatet er oppnådd, vil følgende melding skrives ut på terminalen din:

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:

Deretter redigerer du domeneserverblokken som følger:

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 konfigurasjonen over tvinger vi HTTPS og omdirigerer fra www til ikke-www versjon.

Last inn Nginx-tjenesten på nytt for at endringene skal tre i kraft:

sudo systemctl reload nginx

Forny automatisk Let's Encrypt SSL-sertifikat

Let's Encrypts sertifikater er gyldige i 90 dager. For å fornye sertifikatene automatisk før de utløper, oppretter certbot-pakken en cronjob som kjøres to ganger om dagen og automatisk fornyer alle sertifikater 30 dager før utløpet.

Siden vi bruker certbot webroot-plugin-modulen når sertifikatet er fornyet, må vi også laste inn nginx-tjenesten på nytt. Legg til - --renew-hook "systemctl reload nginx" til filen --renew-hook "systemctl reload nginx" slik at den ser slik ut:

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 den automatiske fornyelsesprosessen ved å kjøre denne kommandoen:

sudo certbot renew --dry-run

Hvis det ikke er noen feil, betyr det at fornyelsesprosessen var vellykket.

Konklusjon

Å ha et SSL-sertifikat er et must i dag. Det sikrer nettstedet ditt, øker SERP-rangeringsposisjonen og lar deg aktivere HTTP / 2 på webserveren.

I denne opplæringen brukte du Let's Encrypt-klienten, certbot til å generere SSL-sertifikater for domenet ditt. Du har også opprettet Nginx-utdrag for å unngå duplisering av kode og konfigurert Nginx til å bruke sertifikatene. På slutten av opplæringen har du satt opp en cronjob for automatisk fornyelse av sertifikater.

nginx debian la oss kryptere certbot ssl

Dette innlegget er en del av Hvordan installere LEMP Stack i Debian 9-serien.

Andre innlegg i denne serien:

• Hvordan installere MariaDB på Ubuntu 18.04 • Slik installerer du Nginx på Debian 9 • Hvordan installerer PHP på Debian 9 • Slik installerer du Nginx-serverblokker på Debian 9 • Sikker Nginx med Let's Encrypt på Debian 9