Come proteggere Nginx con Let’s Encrypt su Ubuntu 20.04

Introduzione

Let’s Encrypt è un’autorità di certificazione (CA) che fornisce un modo facile per ottenere e installare gratuitamente certificati TLS/SSL, consentendo così l’HTTPS crittografato sui server web. Semplifica il processo fornendo un client software, Certbot, che cerca di automatizzare la maggior parte (se non tutte) delle operazioni richieste. Attualmente, l’intero processo di ottenimento e installazione di un certificato è completamente automatizzato sia su Apache che su Nginx.

In questo tutorial, utilizzerai Certbot per ottenere un certificato SSL gratuito per Nginx su Ubuntu 20.04 e configurare il tuo certificato per il rinnovo automatico.

Questo tutorial utilizzerà un file di configurazione separato del server Nginx invece del file predefinito. Consigliamo di creare nuovi file di blocco del server Nginx per ogni dominio perché aiuta a evitare errori comuni e mantiene i file predefiniti come configurazione di fallback.

Lascia che DigitalOcean si preoccupi di gestire Nginx e Let’s Encrypt. La piattaforma App di DigitalOcean ti permetterà di effettuare il deploy direttamente da GitHub in pochi minuti. La piattaforma App si occuperà anche dei certificati SSL e del routing per te.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di:

  • Un server Ubuntu 20.04 configurato seguendo questo tutorial setup iniziale del server per Ubuntu 20.04, inclusi un utente non root abilitato a sudo e un firewall.

  • Un nome di dominio registrato. Questo tutorial utilizzerà example.com in tutto. Puoi acquistare un nome di dominio da Namecheap, ottenerne uno gratuitamente con Freenom, o utilizzare il registrar di domini di tua scelta.

  • Entrambi i seguenti record DNS devono essere configurati per il tuo server. Se stai utilizzando DigitalOcean, consulta la nostra documentazione DNS per i dettagli su come aggiungerli.

    • Un record A con example.com che punta all’indirizzo IP pubblico del tuo server.
    • Un record A con www.example.com che punta all’indirizzo IP pubblico del tuo server.
  • Nginx installato seguendo Come Installare Nginx su Ubuntu 20.04. Assicurati di avere un blocco del server per il tuo dominio. Questo tutorial utilizzerà /etc/nginx/sites-available/example.com come esempio.

Passaggio 1 — Installazione di Certbot

Il primo passo per utilizzare Let’s Encrypt per ottenere un certificato SSL è installare il software Certbot sul tuo server.

Installa Certbot e il suo plugin Nginx con apt:

  1. sudo apt install certbot python3-certbot-nginx

Certbot è ora pronto per essere utilizzato, ma affinché possa configurare automaticamente SSL per Nginx, è necessario verificare alcune configurazioni di Nginx.

Passaggio 2 — Conferma della configurazione di Nginx

Certbot deve essere in grado di trovare il blocco server corretto nella configurazione di Nginx per poter configurare automaticamente SSL. In particolare, fa ciò cercando una direttiva server_name che corrisponda al dominio per cui richiedi un certificato.

Se hai seguito il passaggio di configurazione del blocco server nel tutorial di installazione di Nginx, dovresti avere un blocco server per il tuo dominio in /etc/nginx/sites-available/esempio.com con la direttiva server_name già impostata correttamente.

Per verificare, apri il file di configurazione per il tuo dominio usando nano o il tuo editor di testo preferito:

  1. sudo nano /etc/nginx/sites-available/example.com

Trova la linea server_name esistente. Dovrebbe essere simile a questa:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

Se lo è, esci dall’editor e passa al passaggio successivo.

Se non lo fa, aggiornalo per farlo corrispondere. Quindi salva il file, esci dal tuo editor e verifica la sintassi delle tue modifiche alla configurazione:

  1. sudo nginx -t

Se ottieni un errore, riapri il file del blocco del server e controlla la presenza di eventuali errori di battitura o caratteri mancanti. Una volta corretta la sintassi del file di configurazione, ricarica Nginx per caricare la nuova configurazione:

  1. sudo systemctl reload nginx

Certbot ora può trovare automaticamente il blocco server corretto e aggiornarlo.

Successivamente, aggiorniamo il firewall per consentire il traffico HTTPS.

Passaggio 3 – Consentire HTTPS attraverso il firewall

Se hai il firewall ufw abilitato, come raccomandato dalle guide preliminari, dovrai regolare le impostazioni per consentire il traffico HTTPS. Fortunatamente, Nginx registra alcuni profili con ufw durante l’installazione.

Puoi vedere le impostazioni attuali digitando:

  1. sudo ufw status

Probabilmente sembrerà così, il che significa che solo il traffico HTTP è consentito al server web:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Per consentire inoltre il traffico HTTPS, permetti il profilo Nginx Full e elimina l’autorizzazione ridondante del profilo Nginx HTTP:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

La tua situazione dovrebbe ora apparire così:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Successivamente, eseguiamo Certbot e recuperiamo i nostri certificati.

Passo 4 — Ottenere un Certificato SSL

Certbot fornisce una varietà di modi per ottenere certificati SSL tramite plugin. Il plugin Nginx si occuperà di riconfigurare Nginx e ricaricare la configurazione quando necessario. Per utilizzare questo plugin, digita quanto segue:

  1. sudo certbot --nginx -d example.com -d www.example.com

Questo esegue certbot con il plugin --nginx, utilizzando -d per specificare i nomi di dominio per i quali desideriamo che il certificato sia valido.

Se è la prima volta che esegui certbot, ti verrà chiesto di inserire un indirizzo email e accettare i termini del servizio. Dopo averlo fatto, certbot comunicherà con il server Let’s Encrypt, quindi eseguirà una sfida per verificare che tu controlli il dominio per il quale stai richiedendo un certificato.

Se ciò ha successo, certbot chiederà come desideri configurare le impostazioni HTTPS.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Seleziona la tua scelta e premi INVIO. La configurazione verrà aggiornata e Nginx verrà ricaricato per applicare le nuove impostazioni. certbot concluderà con un messaggio che ti informa che il processo è stato completato con successo e dove sono memorizzati i tuoi certificati:

Output
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-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. 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: https://eff.org/donate-le

I tuoi certificati sono stati scaricati, installati e caricati. Prova a ricaricare il tuo sito web utilizzando https:// e nota l’indicatore di sicurezza del tuo browser. Dovrebbe indicare che il sito è correttamente protetto, di solito con un’icona a forma di lucchetto. Se testi il tuo server usando il Test del Server SSL Labs, otterrai un voto A.

Concludiamo testando il processo di rinnovo.

Passaggio 5 — Verifica del Rinnovo Automatico di Certbot

I certificati di Let’s Encrypt sono validi solo per novanta giorni. Questo è per incoraggiare gli utenti ad automatizzare il processo di rinnovo del certificato. Il pacchetto certbot che abbiamo installato si occupa di questo per noi aggiungendo un timer di systemd che verrà eseguito due volte al giorno e rinnoverà automaticamente qualsiasi certificato che sia entro trenta giorni dalla scadenza.

Puoi verificare lo stato del timer con systemctl:

  1. sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

Per testare il processo di rinnovo, puoi eseguire una prova a secco con certbot:

  1. sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Quando necessario, Certbot rinnoverà i tuoi certificati e ricaricherà Nginx per applicare le modifiche. Se il processo di rinnovo automatico dovesse mai fallire, Let’s Encrypt invierà un messaggio all’email che hai specificato, avvisandoti quando il tuo certificato sta per scadere.

Conclusione

In questo tutorial, hai installato il client Let’s Encrypt certbot, scaricato i certificati SSL per il tuo dominio, configurato Nginx per utilizzare questi certificati e impostato il rinnovo automatico del certificato. Se hai ulteriori domande sull’uso di Certbot, la documentazione ufficiale è un buon punto di partenza.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04