androide

Nginx sicuro con crittografiamo su centos 8

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.

In questo tutorial, forniremo istruzioni dettagliate su come installare un certificato SSL Let's Encrypt gratuito su CentOS 8 che esegue Nginx come server Web. Mostreremo anche come configurare Nginx per usare il certificato SSL e abilitare HTTP / 2.

Prerequisiti

Prima di procedere, assicurarsi di aver soddisfatto i seguenti prerequisiti:

  • Hai un nome di dominio che punta al tuo IP pubblico. Useremo example.com . Hai Nginx installato sul tuo server CentOS. Il tuo firewall è configurato per accettare connessioni sulle porte 80 e 443.

Installazione di Certbot

Certbot è uno strumento da riga di comando gratuito che semplifica il processo per ottenere e rinnovare Let's Encrypt certificati SSL e abilitare automaticamente HTTPS sul tuo server.

Il pacchetto certbot non è incluso nei repository standard di CentOS 8, ma può essere scaricato dal sito Web del fornitore.

Eseguire il seguente comando wget come utente root o sudo per scaricare lo script certbot nella /usr/local/bin :

sudo wget -P /usr/local/bin

Una volta completato il download, rendere eseguibile il file:

sudo chmod +x /usr/local/bin/certbot-auto

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

Generare un nuovo set di parametri DH a 2048 bit digitando il comando seguente:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Ottenere un certificato SSL Let's Encrypt

Per ottenere un certificato SSL per il 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.

sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp nginx /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt

Per evitare la duplicazione del codice, creare i seguenti due frammenti che saranno inclusi in tutti i file di blocco del server Nginx:

sudo mkdir /etc/nginx/snippets /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; } /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; 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;

Lo snippet sopra include i cippatori raccomandati da Mozilla, abilita la pinzatura OCSP, la sicurezza del trasporto rigorosa HTTP (HSTS) e applica poche intestazioni HTTP incentrate sulla sicurezza.

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

/etc/nginx/conf.d/example.com.conf

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Ricarica la configurazione di Nginx per rendere effettive le modifiche:

sudo systemctl reload nginx

Esegui lo strumento certbot con il plugin webroot per ottenere i file del certificato SSL per il tuo dominio:

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

Se questo la prima volta che invochi certbot , lo strumento installerà le dipendenze mancanti.

Una volta ottenuto correttamente il certificato SSL, 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 2020-03-12. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew" - 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:

/etc/nginx/conf.d/example.com.conf

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 la versione da www a non www.

Infine, ricaricare il servizio Nginx per rendere effettive le modifiche:

sudo systemctl reload nginx

Ora, 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, crea un cronjob che verrà eseguito due volte al giorno e rinnoverà automaticamente qualsiasi certificato 30 giorni prima della scadenza.

Utilizzare il comando crontab per creare un nuovo cronjob:

sudo crontab -e

Incolla la seguente riga:

0 */12 * * * root test -x /usr/local/bin/certbot-auto -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && /usr/local/bin/certbot-auto -q renew --renew-hook "systemctl reload nginx"

Salva e chiudi il file.

Per testare il processo di rinnovo, è possibile utilizzare il comando certbot seguito dall'opzione --dry-run :

sudo certbot renew --dry-run

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

Conclusione

In questo tutorial, ti abbiamo mostrato come usare il client Let's Encrypt, certbot per scaricare i certificati SSL per il tuo dominio. Abbiamo anche creato frammenti di Nginx per evitare la duplicazione del codice e configurato Nginx per l'utilizzo dei certificati. Alla fine del tutorial, abbiamo creato un cronjob per il rinnovo automatico del certificato.

Per ulteriori informazioni su Certbot, visitare la pagina della documentazione.

nginx centos crittografiamo certbot ssl