Nginx SSL · 10 min read · Nov 17, 2025
Installa Let's Encrypt e Sicurezza Nginx con SSL/TLS in Debian 9
Questo tutorial ti mostrerà come installare e proteggere un server web Nginx su Debian 9 con un certificato TLS emesso gratuitamente dall’Autorità di Certificazione Let’s Encrypt. Inoltre, configureremo il rinnovo automatico dei certificati TLS di Lets’ Encrypt utilizzando un cron job prima che i certificati scadano.
TLS, noto anche come Transport Layer Security, è un protocollo di rete che utilizza certificati SSL per crittografare il traffico di rete che scorre tra un server e un client, o tra un server web, come il server Nginx, e un browser. Tutti i dati scambiati tra queste due entità sono protetti e la connessione non può essere decrittografata anche se viene intercettata utilizzando una tecnica come un attacco man in the middle o packet sniffing. Il pacchetto software certbot è l’utilità client ufficiale fornita da Let’s Encrypt CA che può essere utilizzata nel processo di generazione e download di certificati Let’s Encrypt gratuiti in Debian.
Requisiti
- Installare LEMP Stack in Debian 9.
- Un nome di dominio registrato pubblico con record DNS appropriati (record A o record CNAME per i sottodomini).
- Accesso diretto alla console del server o accesso SSH remoto al server.
- Un account utente con privilegi di root o accesso diretto all’account root.
Installa l’Utilità Client Certbot
Per installare l’utilità client Let’s Encrypt cerbot in Debian 9 dai repository ufficiali di Debian, apri un terminale ed emetti il seguente comando con privilegi di root, come illustrato nello screenshot seguente.
apt-get install certbot
L’utilità apt di Debian, che è l’interfaccia a riga di comando del principale gestore pacchetti di Debian, ti chiederà, dopo alcuni controlli preliminari, se sei d’accordo a continuare con l’installazione del pacchetto certbot e di tutte le sue dipendenze richieste. Per accettare il processo di installazione del software rispondi con sì (y) al prompt della console del server.
Ottieni il Certificato Let’s Encrypt
Per generare e scaricare certificati Let’s Encrypt per un dominio, assicurati prima che il server web Nginx sia attivo e funzionante e che almeno la porta 80 sia accessibile da Internet. Per verificare se Nginx è in esecuzione, esegui i seguenti comandi con privilegi di root.
sudo systemctl status nginxSe il server non è già in esecuzione, avvia il demone Nginx con il comando sottostante.
sudo systemctl start nginxNel caso tu abbia un firewall comune installato in Debian, come il firewall UFW, che blocca tutte le connessioni in entrata sulle porte 80 e 443, emetti i seguenti comandi per aprire le porte HTTP e HTTPS nel sistema.
sudo ufw allow 80/tcpsudo ufw allow 443/tcpPer ottenere certificati per il tuo dominio, esegui il comando cerbot nella console con i seguenti parametri e flag come spiegato di seguito. Esegui il comando con privilegi di root e fornisci il tuo nome di dominio e tutti gli altri sottodomini per i quali desideri ottenere certificati utilizzando il flag –d. Inoltre, fornisci l’opzione –standalone affinché certbot non interferisca con i file di configurazione di Nginx. Il server Nginx deve essere arrestato mentre si emettono certificati utilizzando questa opzione.
La sintassi del comando cerbot:
sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.comQuando esegui per la prima volta il comando certbot e ottieni il certificato, ti verrà chiesto di aggiungere il tuo indirizzo email e di accettare i termini di servizio di Let’s Encrypt. Scrivi ‘ a ’ per accettare i termini di servizio ‘ no’ per non condividere il tuo indirizzo email con i partner di Let’s Encrypt. Infine, dopo aver ottenuto il certificato per il tuo dominio, leggi le note nel piè di pagina per localizzare il percorso del sistema dei certificati e la data in cui scadranno.
Modo alternativo per ottenere un certificato SSL di Let’s Encrypt
Per ottenere un certificato Let’s Encrypt tramite il plugin “ webroot “, utilizza la sintassi sottostante. Aggiungi la directory radice web di Nginx, che per impostazione predefinita si trova nel percorso di sistema /var/www/html/, mentre emetti il comando certbot con i flag –webroot e –w. Inoltre, assicurati che Nginx abbia pieni diritti di scrittura sulla directory radice web per creare la directory /.well-known.
L’opzione –webroot per cerbot ti chiederà anche di aggiungere il tuo indirizzo email per il rinnovo del certificato e le notifiche di sicurezza. Il client Certbot ha un codice integrato che può rilevare un indirizzo email falso. Devi fornire un indirizzo email pubblico accessibile per continuare a ottenere un certificato.
certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com*Salvataggio del log di debug in /var/log/letsencrypt/letsencrypt.log**Inserisci l'indirizzo email (utilizzato per il rinnovo urgente e le notifiche di sicurezza) (Inserisci 'c' per**annullare):[email protected] #Un indirizzo email falso sarà rilevato**Sembra che ci siano problemi con quell'indirizzo**. Inserisci l'indirizzo email (utilizzato per**il rinnovo urgente e le notifiche di sicurezza) Se vuoi davvero saltare questo, puoi**eseguire il client con --register-unsafely-without-email ma assicurati di fare poi**il backup della tua chiave account da /etc/letsencrypt/accounts (Inserisci 'c' per annullare):[email protected]** **-------------------------------------------------------------------------------**Si prega di leggere i Termini di Servizio a**https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Devi accettare**per registrarti con il server ACME a**https://acme-v01.api.letsencrypt.org/directory**-------------------------------------------------------------------------------**(A)ccetta/(C)ancella: a** **-------------------------------------------------------------------------------**Saresti disposto a condividere il tuo indirizzo email con l'Electronic Frontier**Foundation, un partner fondatore del progetto Let's Encrypt e l'organizzazione no-profit**che sviluppa Certbot? Ci piacerebbe inviarti email su EFF e**il nostro lavoro per crittografare il web, proteggere i suoi utenti e difendere i diritti digitali.**-------------------------------------------------------------------------------**(S)ì/(N)o: n**Ottenimento di un nuovo certificato**Esecuzione delle seguenti sfide:**sfida http-01 per www.domain.com**Utilizzando il percorso webroot /var/www/html/ per tutti i domini non corrispondenti.**Attesa per la verifica...**Pulizia delle sfide** **NOTE IMPORTANTI:** - Congratulazioni! Il tuo certificato e la catena sono stati salvati in** /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Il tuo** certificato scadrà il 2017-12-28. Per ottenere una nuova versione o modificata** di questo certificato in futuro, esegui semplicemente di nuovo certbot. Per** rinnovare in modo non interattivo *tutti* i tuoi certificati, esegui "certbot** renew"** - Le tue credenziali di account sono state salvate nella tua configurazione Certbot** directory in /etc/letsencrypt. Dovresti** fare un backup sicuro di questa cartella ora. Questa configurazione** directory conterrà anche certificati e chiavi private ottenute** da Certbot, quindi fare backup regolari di questa cartella è ideale.** - Se ti piace Certbot, ti preghiamo di considerare di supportare il nostro lavoro con:** ** Donazioni a ISRG / Let's Encrypt: https://letsencrypt.org/donate** Donazioni a EFF: **https://eff.org/donate-le*
Configura Nginx per TLS (SSL)
Un file di configurazione TLS completo predefinito di Nginx per un dominio dovrebbe apparire come nell’estratto di file sottostante.
/etc/nginx/sites-enabled/default-ssl file di esempio:
* server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name www.yourdomain.com yourdomain.com;
#server_name _;
root /var/www/html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#Certificati SSL
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}
set $cache_uri $request_uri;
location ~ /.well-known {
allow all;
}
#
# # Con php-fpm (o altri socket unix):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # Con php-cgi (o altri socket tcp):
# fastcgi_pass 127.0.0.1:9000;
}
# nega l'accesso ai file .htaccess, se la root document di Apache
# coincide con quella di nginx
#
#location ~ \.ht {
# deny all;
#}
** }*Le righe di codice per l’elaborazione degli script PHP tramite FastCGI Process Manager possono essere trovate anche in questo estratto e sono rappresentate dalle seguenti righe.
*location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
*Installa i Certificati Let’s Encrypt in Nginx
I certificati e le chiavi Let’s Encrypt sono memorizzati nella directory /etc/letsencrypt/live/www.yourdomain.com/ in Debian. Il comando ls contro la directory sopra rivelerà tutti i componenti del certificato, come il file della catena, il file fullchain, la chiave privata e il file del certificato.
ls /etc/letsencrypt/live/www.yourdomain.com/Per installare il certificato Let’s Encrypt nel file di configurazione TLS del server web Nginx, apri il file default-ssl di Nginx e aggiorna le righe sottostanti per riflettere i percorsi dei file del certificato Let’s Encrypt per il tuo dominio, come mostrato nell’estratto sottostante.
nano /etc/nginx/sites-enabled/default-sslCambia le seguenti righe come segue:
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";**
Inoltre, se la dichiarazione ssl_dhparam è presente nella configurazione SSL di Nginx, devi generare una nuova chiave Diffie–Hellman a 2048 bit emettendo il seguente comando. La generazione dei parametri della chiave Diffie–Hellman dovrebbe richiedere un po’ di tempo a seconda della casualità o dell’entropia del tuo sistema.
openssl dhparam –out /etc/nginx/dhparam.pem 2048Infine, prima di attivare la configurazione TLS di Nginx riavviando il demone Nginx per riflettere le modifiche, controlla prima le configurazioni di Nginx per potenziali errori di sintassi. Successivamente, se il test del file di configurazione di Nginx ha esito positivo, riavvia il demone Nginx per caricare la nuova configurazione insieme ai certificati Let’s Encrypt, emettendo i seguenti comandi.
nginx -tservice nginx restartPer verificare se il servizio nginx possiede un socket aperto in stato di ascolto sulla porta 443, esegui il comando netstat come mostrato nell’estratto sottostante.
netstat –tulpn | grep -e 443 -e LISTENDovresti anche aprire un browser e navigare al tuo nome di dominio tramite il protocollo HTTPS. Se i certificati Let’s Encrypt sono stati applicati con successo in Nginx, il handshake SSL dovrebbe funzionare senza problemi senza generare errori.
Forza il traffico web su HTTPS
Per costringere i visitatori del tuo dominio a navigare sul tuo sito web solo tramite il protocollo HTTPS, apri il file di configurazione predefinito di Nginx sites-enabled e aggiungi la seguente riga, che costringe tutte le richieste che colpiscono la porta 80 a essere reindirizzate con un codice di stato 301 (spostato permanentemente) alla porta 443.
nano /etc/nginx/sites-enabled/defaultLa dichiarazione di reindirizzamento dovrebbe apparire come presentato nell’estratto sottostante.
*server_name www.yourdomain.com yourdomain.com;
**return 301 https://$server_name$request_uri;*
Successivamente, riavvia il demone Nginx per applicare la modifica, emettendo il seguente comando.
service nginx restartControlli finali
Per ulteriori indagini sui certificati generati dall’Autorità di Certificazione Let’s Encrypt, puoi utilizzare un moderno browser web, come Chrome. Visita il tuo dominio dal browser Chrome e premi il tasto funzione F12 per aprire gli Strumenti per sviluppatori. Naviga alla scheda Sicurezza e fai clic sul pulsante Visualizza certificato per aprire il certificato, come mostrato negli screenshot seguenti.
Un’altra utilità utile per indagare sui certificati SSL si rivela essere l’utilità da riga di comando openssl. Per mostrare informazioni extra per un certificato dell’Autorità di Certificazione Let’s Encrypt, esegui il seguente comando in una console Linux.
openssl s_client –connect www.yourdomain.com:443
Rinnova automaticamente il certificato Let’s Encrypt
Per rinnovare automaticamente un certificato emesso dall’Autorità di Certificazione Let’s Encrypt prima della data di scadenza, pianifica un lavoro crontab da eseguire una volta al giorno alle 2:00 AM, emettendo il seguente comando. L’output del cron job eseguito sarà diretto a un file di log, memorizzato in /var/log/letsencrypt.log
crontab –eLavoro cron per rinnovare il certificato.
**0 2 * * *** certbot renew >> /var/log/letsencrypt.logQuesto è tutto! Per altre configurazioni più avanzate riguardanti i certificati e l’utilità Let’s Encrypt, visita la documentazione ufficiale al seguente indirizzo internet https://certbot.eff.org/docs/.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.