androide

Nginx sicuro con crittografiamo su Ubuntu 18.04

OBS Studio: multistream gratis con NGINX. Tutorial completo

OBS Studio: multistream gratis con NGINX. Tutorial completo

Sommario:

Anonim

Let's Encrypt è un'autorità di certificazione libera e aperta sviluppata da Internet Security Research Group (ISRG). I certificati emessi da Let's Encrypt sono oggi considerati affidabili da quasi tutti i browser.

In questo tutorial, forniremo istruzioni dettagliate su come proteggere Nginx con Let's Encrypt usando lo strumento certbot su Ubuntu 18.04.

Prerequisiti

Assicurati di aver soddisfatto i seguenti prerequisiti prima di continuare con questo tutorial:

  • Hai un nome di dominio che punta all'IP del tuo server pubblico. In questo tutorial useremo example.com . Hai installato Nginx seguendo queste istruzioni. Hai un blocco server per il tuo dominio. Puoi seguire queste istruzioni per i dettagli su come crearne uno.

Installa Certbot

Certbot è uno strumento completo e facile da usare che può automatizzare le attività per ottenere e rinnovare i certificati SSL Let's Encrypt e configurare i server Web per utilizzare i certificati. Il pacchetto certbot è incluso nei repository Ubuntu predefiniti.

Aggiorna l'elenco dei pacchetti e installa il pacchetto certbot:

sudo apt update sudo apt install certbot

Genera gruppo Strong Dh (Diffie-Hellman)

Lo scambio di chiavi Diffie-Hellman (DH) è un metodo di scambio sicuro di chiavi crittografiche su un canale di comunicazione non protetto. Genereremo un nuovo set di parametri DH a 2048 bit per rafforzare la sicurezza:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Se lo desideri, puoi modificare le dimensioni fino a 4096 bit, ma in tal caso, la generazione potrebbe richiedere più di 30 minuti a seconda dell'entropia del sistema.

Ottenere un certificato SSL Let's Encrypt

Per ottenere un certificato SSL per il nostro dominio utilizzeremo il plug-in Webroot che funziona creando un file temporaneo per convalidare il dominio richiesto nella ${webroot-path}/.well-known/acme-challenge . Il server Let's Encrypt invia richieste HTTP al file temporaneo per convalidare la risoluzione del dominio richiesto sul server su cui viene eseguito certbot.

Per rendere più semplice .well-known/acme-challenge tutte le richieste HTTP per .well-known/acme-challenge in una singola directory, /var/lib/letsencrypt .

I seguenti comandi creeranno la directory e la renderanno scrivibile per il server Nginx.

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

Per evitare la duplicazione del codice, crea i seguenti due frammenti che includeremo in tutti i nostri file di blocco del server Nginx.

Apri il tuo editor di testo e crea il primo frammento, 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 il secondo frammento ssl.conf che include i cippatori consigliati da Mozilla, abilita la pinzatura OCSP, HTTP Strict Transport Security (HSTS) e applica poche intestazioni HTTP incentrate sulla sicurezza.

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;

Dopo aver creato gli snippet, apri il blocco del server di dominio e includi lo snippet letsencrypt.conf come mostrato di seguito:

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

Per abilitare il nuovo file di blocco del server è necessario creare un collegamento simbolico dal file alla directory sites-enabled per i sites-enabled , che viene letta da Nginx all'avvio:

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

Riavvia il servizio Nginx per rendere effettive le modifiche:

sudo systemctl restart nginx

Ora puoi eseguire Certbot con il plugin webroot e ottenere i file del certificato SSL emettendo:

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

Se il certificato SSL viene ottenuto correttamente, certbot stamperà il seguente messaggio:

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:

Ora che hai i file del certificato, puoi modificare il tuo blocco del server di dominio come segue:

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 }

Con la configurazione sopra stiamo forzando HTTPS e reindirizzando dalla versione www alla versione non www.

Ricarica il servizio Nginx per rendere effettive le modifiche:

sudo systemctl reload nginx

Rinnovo automatico Let's Encrypt SSL certificate

I certificati Let's Encrypt sono validi per 90 giorni. Per rinnovare automaticamente i certificati prima della scadenza, il pacchetto certbot crea un cronjob che viene eseguito due volte al giorno e rinnoverà automaticamente qualsiasi certificato 30 giorni prima della sua scadenza.

Dato che stiamo usando il plug-in webroot certbot una volta rinnovato il certificato, dobbiamo anche ricaricare il servizio nginx. Aggiungi --renew-hook "systemctl reload nginx" al file /etc/cron.d/certbot questo modo:

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"

Per testare il processo di rinnovo, è possibile utilizzare l' --dry-run certbot --dry-run :

sudo certbot renew --dry-run

Se non ci sono errori, significa che il processo di rinnovo è andato a buon fine.

Conclusione

In questa esercitazione, hai utilizzato il client Let's Encrypt, certbot per scaricare i certificati SSL per il tuo dominio. Hai anche creato frammenti di Nginx per evitare la duplicazione del codice e configurato Nginx per l'utilizzo dei certificati. Alla fine del tutorial è stato impostato un cronjob per il rinnovo automatico del certificato.

nginx ubuntu crittografiamo certbot ssl

Questo post è una parte dell'installazione-lemp-stack-on-ubuntu-how-to-18-04 serie.

Altri post di questa serie:

• Come installare Nginx su Ubuntu 18.04 • Come impostare blocchi Nginx server su Ubuntu 18.04 • sicura Nginx con Encrypt Let su Ubuntu 18.04 • Come installare MySQL su Ubuntu 18.04 • Come installare PHP su Ubuntu 18.04