androide

Nginx sicuro con crittografiamo su debian 10 linux

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, automatizzata e aperta sviluppata da Internet Security Research Group (ISRG) che fornisce certificati SSL gratuiti.

I certificati emessi da Let's Encrypt sono considerati affidabili da tutti i principali browser e sono validi per 90 giorni dalla data di emissione.

Questo tutorial mostra come installare un certificato SSL Let's Encrypt gratuito su Debian 10, Buster che esegue Nginx come server web. Mostreremo anche come configurare Nginx per usare il certificato SSL e abilitare HTTP / 2.

Prerequisiti

Assicurarsi che siano soddisfatti i seguenti prerequisiti prima di procedere con la guida:

  • Accesso effettuato come root o utente con privilegi sudo. Il dominio per il quale si desidera ottenere il certificato SSL deve puntare al proprio IP del server pubblico. Useremo example.com .Nginx installato.

Installazione di Certbot

Useremo lo strumento certbot per ottenere e rinnovare i certificati.

Certbot è uno strumento completo e facile da usare che automatizza 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 Debian predefiniti. Esegui i seguenti comandi per installare certbot:

sudo apt update sudo apt install certbot

Generazione del gruppo 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

È inoltre possibile modificare la dimensione fino a 4096 bit, ma la generazione può 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 dominio, utilizzeremo il plug-in Webroot. 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.

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

Eseguire i comandi seguenti per creare la directory e renderla 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, creeremo due frammenti che verranno inclusi in tutti i 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; }

Il secondo frammento ssl.conf 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.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; 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=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

Una volta fatto, apri il file di 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; }

Creare un collegamento simbolico alla directory sites-enabled per i sites-enabled per abilitare il blocco del server di dominio:

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 sei pronto per ottenere i file del certificato SSL eseguendo il comando seguente:

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, sul terminale verrà stampato il seguente messaggio:

IMPORTANT NOTES: 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 2020-02-22. 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" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Modificare il blocco del server di dominio e includere i file del certificato SSL 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 }

La configurazione sopra dice a Nginx di reindirizzare da HTTP a HTTPS e da www a versione non www.

Riavvia o ricarica il servizio Nginx per rendere effettive le modifiche:

sudo systemctl restart nginx

Apri il tuo sito Web utilizzando https:// e noterai un'icona di blocco verde.

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 rinnova automaticamente qualsiasi certificato 30 giorni prima della scadenza.

Al momento del rinnovo, il servizio nginx deve essere ricaricato affinché il server carichi il certificato. 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"

Testare il processo di rinnovo automatico, eseguendo questo comando:

sudo certbot renew --dry-run

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

Conclusione

Avere un certificato SSL è un must al giorno d'oggi. Protegge il tuo sito Web, aumenta la posizione in classifica SERP e ti consente di abilitare HTTP / 2 sul tuo server web.

In questo tutorial, ti abbiamo mostrato come generare e rinnovare i certificati SSL usando lo script certbot. Ti abbiamo anche mostrato come configurare Nginx per usare i certificati.

Per ulteriori informazioni su Certbot, visitare la documentazione di Certbot.

nginx debian crittografiamo certbot ssl