Introduzione
Let’s Encrypt è un’autorità di certificazione (CA) che fornisce un modo accessibile per ottenere e installare gratuitamente i certificati TLS/SSL, consentendo così l’HTTPS criptato sui server web. Semplifica il processo fornendo un client software, Certbot, che cerca di automatizzare la maggior parte (se non tutte) le fasi richieste. Attualmente, l’intero processo di ottenere e installare un certificato è completamente automatizzato su entrambi Apache e Nginx.
In questo tutorial, utilizzerai Certbot per ottenere un certificato SSL gratuito per Nginx su Rocky Linux 9 e configurare il tuo certificato per il rinnovo automatico.
Questo tutorial utilizzerà un file di configurazione separato per il server Nginx invece del file predefinito. Dovresti creare nuovi file di blocco del server Nginx per ogni dominio poiché ciò aiuta a evitare errori comuni e mantiene i file predefiniti come configurazione di fallback.
Prerequisiti
Per seguire questo tutorial, avrai bisogno di:
-
Un server Rocky Linux 9 configurato seguendo questo setup iniziale del server per Rocky Linux 9 tutorial, 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 dominio di tua scelta. -
Entrambi i seguenti record DNS 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.
- Un record A con
-
Nginx installato seguendo Come Installare Nginx su Rocky Linux 9. Assicurati di avere un blocco del server per il tuo dominio. Questo tutorial utilizzerà
/etc/nginx/sites-available/example.com
come esempio.
Passo 1 — Installare Certbot
Innanzitutto, è necessario installare il pacchetto software certbot
. Accedi alla tua macchina Rocky Linux 8 come utente non root:
- ssh sammy@your_server_ip
Il pacchetto certbot
non è disponibile tramite il gestore di pacchetti di default. Dovrai abilitare il repository EPEL per installare Certbot.
Per aggiungere il repository EPEL di Rocky Linux 9, esegui il seguente comando:
- sudo dnf install epel-release
Quando ti viene chiesto di confermare l’installazione, digita e premi y
.
Ora che hai accesso al repository extra, installa tutti i pacchetti richiesti:
- sudo dnf install certbot python3-certbot-nginx
Questo installerà Certbot stesso e il plugin Nginx per Certbot, che è necessario per eseguire il programma.
Il processo di installazione ti chiederà di importare una chiave GPG. Conferma così l’installazione può completarsi.
Ora che hai Certbot installato, eseguiamolo per ottenere un certificato.
Passaggio 2 — Conferma della configurazione di Nginx
Certbot ha bisogno di poter trovare il blocco server
corretto nella tua configurazione Nginx per poter configurare automaticamente SSL. Nello specifico, lo fa cercando una direttiva server_name
che corrisponda al dominio per il quale 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/conf.d/esempio.com
con la direttiva server_name
già impostata correttamente.
Per verificare, apri il file di configurazione per il tuo dominio utilizzando nano
o il tuo editor di testo preferito:
- sudo nano /etc/nginx/conf.d/example.com
Trova la linea server_name
esistente. Dovrebbe apparire così:
...
server_name example.com www.example.com;
...
Se lo fa, esci dal tuo editor e passa al passaggio successivo.
Se non lo fa, aggiornalo in modo che corrisponda. Quindi salva il file, esci dal tuo editor e verifica la sintassi delle tue modifiche alla configurazione:
- sudo nginx -t
Se si verifica un errore, riaprire il file del blocco del server e verificare la presenza di eventuali errori di battitura o caratteri mancanti. Una volta che la sintassi del file di configurazione è corretta, ricaricare Nginx per caricare la nuova configurazione:
- sudo systemctl reload nginx
Certbot può ora individuare il blocco server
corretto e aggiornarlo automaticamente.
Successivamente, aggiorniamo il firewall per consentire il traffico HTTPS.
Fase 3 — Aggiornamento delle Regole del Firewall
Dato che la tua configurazione predefinita abilita firewalld
, sarà necessario regolare le impostazioni del firewall per consentire connessioni esterne al tuo server web Nginx.
Per verificare quali servizi sono già abilitati, eseguire il comando:
- sudo firewall-cmd --permanent --list-all
Si riceverà un output simile a questo:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Se non si vede http
nell’elenco dei servizi, abilitarlo con il comando:
- sudo firewall-cmd --permanent --add-service=http
Per consentire il traffico https
, eseguire il seguente comando:
- sudo firewall-cmd --permanent --add-service=https
Per applicare le modifiche, sarà necessario ricaricare il servizio firewall:
- sudo firewall-cmd --reload
Ora che hai aperto il tuo server al traffico https, sei pronto per eseguire Certbot e ottenere i tuoi certificati.
Fase 4 — Ottenere un Certificato SSL
Certbot fornisce una varietà di modi per ottenere certificati SSL attraverso i plugin. Il plugin Nginx si occuperà di riconfigurare Nginx e ricaricare la configurazione quando necessario. Per utilizzare questo plugin, digita quanto segue:
- sudo certbot --nginx -d example.com -d www.example.com
Questo eseguirà il comando certbot
con il plugin --nginx
, utilizzando -d
per specificare i nomi di dominio per i quali è necessario che il certificato sia valido.
Durante l’esecuzione del comando, ti verrà chiesto di inserire un indirizzo email e accettare i termini di servizio. Dopo averlo fatto, dovresti vedere un messaggio che ti informa che il processo è stato completato con successo e dove sono archiviati i tuoi certificati:
OutputSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-12-15.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/conf.d/your_domain.conf
Successfully deployed certificate for www.your_domain to /etc/nginx/conf.d/your_domain.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
…
I tuoi certificati sono scaricati, installati e caricati, e la configurazione di Nginx ora reindirizzerà automaticamente tutte le richieste web a https://
. Prova a ricaricare il tuo sito e osserva l’indicatore di sicurezza del tuo browser. Dovrebbe indicare che il sito è correttamente protetto, di solito con un’icona a lucchetto. Se testi il tuo server usando il SSL Labs Server Test, otterrai un voto A.
Concludiamo testando il processo di rinnovo.
Passo 5 — Verifica del Rinnovo Automatico di Certbot
I certificati Let’s Encrypt sono validi per 90 giorni, ma è consigliabile rinnovarli ogni 60 giorni per consentire un margine di errore. Il client Let’s Encrypt di Certbot ha un comando rinnova
che controlla automaticamente i certificati attualmente installati e cerca di rinnovarli se mancano meno di 30 giorni dalla data di scadenza.
Puoi testare il rinnovo automatico per i tuoi certificati eseguendo questo comando:
- sudo certbot renew --dry-run
Il risultato sarà simile a questo:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for monitoring.pp.ua
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
...
Nota che se hai creato un certificato raggruppato con più domini, nell’output verrà mostrato solo il nome di dominio di base, ma il rinnovo funzionerà per tutti i domini inclusi in questo certificato.
A practical way to ensure your certificates will not get outdated is to create a cron
job that will periodically execute the automatic renewal command for you. Since the renewal first checks for the expiration date and only executes the renewal if the certificate is less than 30 days away from expiration, it is safe to create a cron job that runs every week, or even every day.
Modifica il crontab per creare un nuovo lavoro che eseguirà il rinnovo due volte al giorno. Per modificare il crontab per l’utente root, esegui:
- sudo crontab -e
Il tuo editor di testo aprirà il crontab predefinito, che è un file di testo vuoto in questo momento. Entra in modalità di inserimento premendo i
e aggiungi la seguente riga:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
Quando hai finito, premi ESC
per uscire dalla modalità di inserimento, poi :wq
e INVIO
per salvare ed uscire dal file. Per saperne di più sull’editor di testo Vi e sul suo successore Vim, dai un’occhiata al nostro tutorial Installazione e Uso dell’Editor di Testo Vim su un Server Cloud.
Questo creerà un nuovo lavoro cron che verrà eseguito a mezzogiorno e a mezzanotte ogni giorno. python -c 'import random; import time; time.sleep(random.random() * 3600)'
selezionerà un minuto casuale nell’ora per i tuoi compiti di rinnovo.
Il comando renew
per Certbot controllerà tutti i certificati installati nel sistema e aggiornerà quelli che devono scadere tra meno di trenta giorni. --quiet
indica a Certbot di non mostrare informazioni o aspettare input dall’utente.
Puoi trovare informazioni più dettagliate sul rinnovo nella documentazione di Certbot.
Conclusione
In questa guida, hai installato il client Let’s Encrypt Certbot, scaricato certificati SSL per il tuo dominio e configurato il rinnovo automatico dei certificati. Se hai domande sull’uso di Certbot, puoi consultare la documentazione ufficiale di Certbot.
Puoi anche controllare il blog ufficiale di Let’s Encrypt per eventuali aggiornamenti importanti.