Skip to content

Certbot è un client facile da usare che recupera e distribuisce certificati SSL/TLS Let’s Encrypt, abilitando così HTTPS crittografato sul tuo web server.

Certbot è stato sviluppato dalla Electronic Frontier Foundation EFF e altri come client per Let’s Encrypt. Puoi leggere ulteriori informazioni su Certbot o Let’s Encrypt, rispettivamente.

Gestisci un web server con accesso SSH e vuoi installare un certificato SSL gratuito nei siti web che ospita? Sei nel posto giusto, vediamo come proteggere il tuo sito web utilizzando Certbot ACME su Nginx e Ubuntu.

Premesse

Per abilitare HTTPS sul tuo sito web, devi ottenere un certificato (un tipo di file) da un’autorità di certificazione (CA). Let’s Encrypt è una CA. Per ottenere un certificato per il dominio del tuo sito web da Let’s Encrypt, devi dimostrare il controllo sul dominio. Con Let’s Encrypt, lo fai utilizzando un software che utilizza il protocollo ACME che di solito viene eseguito sul tuo host web.

Per capire quale metodo funzionerà meglio per te, dovrai sapere se hai accesso alla shell (noto anche come accesso SSH) al tuo host web. Se gestisci il tuo sito web interamente tramite un pannello di controllo come cPanel, Plesk o WordPress, ci sono buone probabilità che tu non abbia accesso alla shell. Puoi chiedere al tuo provider di hosting per essere sicuro.

Installare un certificato SSL senza accesso alla shell

Il modo migliore per utilizzare Let’s Encrypt senza accesso alla shell è utilizzare il supporto integrato del provider di hosting. Se il tuo provider di hosting offre il supporto di Let’s Encrypt, può richiedere un certificato gratuito per tuo conto, installarlo e mantenerlo aggiornato automaticamente. Per alcuni provider di hosting, questa è un’impostazione di configurazione che devi attivare. Altri provider richiedono e installano automaticamente i certificati per tutti i loro clienti.

Installare un certificato SSL con accesso alla shell

Si consiglia alla maggior parte delle persone con accesso alla shell di utilizzare il client ACME di Certbot. Può automatizzare l’emissione e l’installazione dei certificati senza tempi di inattività. Dispone inoltre di modalità avanzate per le persone che non desiderano la configurazione automatica. Certbot + facile da usare, funziona su molti sistemi operativi e ha un’ottima documentazione.

Installa Certbot

Per installare il client Certbot su Ubuntu con Nginx, segui le istruzioni di installazione ufficiali. Digita nella console SSHi seguenti comandi in successione.

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx

Genera un gruppo Diffie-Hellman

Dovresti anche generare un forte gruppo Diffie-Hellman per migliorare la sicurezza del certificato. I gruppi Diffie-Hellman (DH) determinano la forza della chiave utilizzata nel processo di scambio delle chiavi. I numeri di gruppo più alti sono più sicuri, ma richiedono tempo aggiuntivo per calcolare la chiave.

Questo comando genererà un gruppo a 2048 bit:

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

Potrebbero essere necessari alcuni minuti prima di avere un gruppo DH forte in /etc/ssl/certs/dhparam.pem. Ci collegheremo a questo percorso in seguito, per ora è bene che tu lo abbia pronto.

Crea uno snippet di configurazione con impostazioni di crittografia avanzate

Creeremo ora uno snippet globale che definirà alcune impostazioni SSL per configurare Nginx con una potente suite di crittografia SSL. Gli snippet ti consentono di inserire la configurazione NGINX non elaborata in diversi contesti delle configurazioni NGINX generate dal controller di ingresso. Questi dovrebbero essere usati come soluzione di ultima istanza nei casi in cui le annotazioni e le voci di ConfigMap non possono aiutare. Gli snippet sono destinati agli utenti NGINX avanzati che necessitano di un maggiore controllo sulla configurazione NGINX.

Abiliteremo funzionalità avanzate che mantengono il nostro server sicuro. Assegniamo a quel file un nome generico (indipendente da qualsiasi nome di dominio):

$ sudo nano /etc/nginx/snippets/ssl-params.conf

Possiamo copiare e incollare il blocco Nginx nella sua interezza. Inoltre imposteremo l’impostazione ssl_dhparam (alla fine) in modo che punti al file Diffie-Hellman che abbiamo generato in precedenza.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
ssl_prefer_server_ciphers on;  
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";  
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0  
ssl_session_cache shared:SSL:10m;  
ssl_session_tickets off; # Requires nginx >= 1.5.9  
ssl_stapling on; # Requires nginx >= 1.3.7  
ssl_stapling_verify on; # Requires nginx => 1.3.7  
resolver 8.8.8.8 8.8.4.4 valid=300s;  
resolver_timeout 5s;  
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";  
add_header X-Frame-Options DENY;  
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Salva e chiudi il file utilizzando l’opzione Write, quindi Exit.

Modifica i blocchi del server Nginx per gestire le richieste SSL

Per creare un nuovo blocco server su Nginx, apri un nuovo file su /etc/nginx/sites-available/. Sostituisci esempio.com con il tuo nome di dominio:

$ sudo nano /etc/nginx/sites-available/esempio.com

Quando imposto un nuovo blocco server per un nome di dominio, utilizzo sempre il modello seguente, quindi puoi anche copiare e incollare il blocco sottostante nel file appena creato:

server {  
    server_name www.esempio.com esempio.com;
    return 301 https://esempio.com$request_uri;
}
server {  
    listen 443 ssl http2;
    server_name www.esempio.com;
    include snippets/ssl-params.conf;
    return 301 https://esempio.com$request_uri;
}
server {  
    listen 443 ssl http2;
    server_name esempio.com;
    include snippets/ssl-params.conf;
    root /var/www/esempio.com;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

Quello che fa questo blocco è che reindirizzerà tutte le richieste in arrivo come segue:

  • Reindirizza tutte le richieste HTTP a HTTPS.
  • Reindirizza www.esempio.com a esempio.com (non www).

Sta a te decidere come reindirizzare i tuoi domini. In questo esempio ho preferito semplicemente la controparte non www. È buona norma consentire solo un’opzione per visualizzare il tuo sito, altrimenti anche le cache del browser o i cookie verranno memorizzati indipendentemente l’uno dall’altro (se non diversamente configurato).

Abilita i blocchi del server e riavvia Nginx

Ora che abbiamo il nostro file di blocco del server, dobbiamo abilitarlo. Possiamo farlo creando collegamenti simbolici di questi file alla directory sites-enabled, dalla quale Nginx legge durante l’avvio.

Possiamo creare questi collegamenti digitando:

$ sudo ln -s /etc/nginx/sites-available/esempio.com etc/nginx/sites-enabled/

Questo file è ora nella directory abilitata (mentre l’originale si trova ancora in sites-available). È un modo conveniente di Nginx per abilitare e disabilitare i siti aggiungendo e rimuovendo collegamenti.
Per evitare problemi di memoria hash bucket che possono sorgere dall’aggiunta di nomi di server aggiuntivi, regoleremo un singolo valore all’interno del nostro file /etc/nginx/nginx.conf.

Apri il file:

$ sudo nano /etc/nginx/nginx.conf

All’interno del file, trova la direttiva server_names_hash_bucket_size. Rimuovi il simbolo # per rimuovere il commento dalla riga in modo che il contenuto abbia questo aspetto:

http {
    ...

    server_names_hash_bucket_size 64;

    ...
}

Salva e chiudi il file quando hai finito. Prova la configurazione per assicurarti che non ci siano errori di sintassi in nessuno dei tuoi file Nginx:

$ sudo nginx -t

Otterrai un risultato simile a questo se tutto è riuscito:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se non sono stati trovati problemi, riavvia Nginx per abilitare le modifiche:

$ sudo service nginx restart

Nginx dovrebbe ora servire il tuo nome di dominio.

Ottieni un certificato SSL

Ora puoi eseguire Certbot con il plugin Nginx che configurerà automaticamente tutto per te.

$ sudo certbot certonly --nginx

Dovrebbe apparire un elenco di nomi di dominio configurati per i quali è possibile installare i rispettivi certificati.

Installa il plugin Nginx

Se, invece, viene visualizzato un messaggio di errore come:

The requested nginx plugin does not appear to be installed

potrebbe essere necessario installare prima il plug-in Certbox Nginx.

$ sudo apt-get install python-certbot-nginx

Ora dovresti essere in grado di procedere con l’installazione:

$ sudo certbot certonly --nginx

Emissione di certificati e catene SSL Certbot

Dopo il comando precedente, vedrai una schermata che mostra l’elenco dei siti abilitati pronti per l’emissione del certificato:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: esempio.com
2: www.esempio.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):

Nel nostro caso, emetti i certificati sia per esempio.com che per www.esempio.com perché abbiamo un blocco server per ogni nome di dominio non www e www. Pertanto, inserisci 1,2 (i numeri che precedono ogni nome di dominio elencato. In pratica, ne abbiamo solo bisogno, ma è preferibile avere certificati validi disponibili nel caso in cui un visitatore finisca in qualche modo sul nome di dominio non www o www .

Assicurati di avere i record DNS del tuo nome di dominio (cioè i record A per la controparte non www e www) configurati e collegati in anticipo al tuo server di destinazione, altrimenti l’emissione dei certificati non andrà a buon fine.

Collegamento ai file del certificato SSL appena ottenuti

Abbiamo quasi fatto. Vogliamo solo essere sicuri che i certificati SSL appena generati siano correttamente referenziati nei blocchi del server Nginx.

Riapri il file di configurazione che abbiamo modificato in precedenza:

$ sudo nano /etc/nginx/sites-available/esempio.com

Aggiungi i riferimenti per ssl_certificate, ssl_certificate_key e ssl_trusted_certificate. Si trovano tutti in / etc / letsencrypt / live. Assicurati di sostituire di nuovo esempio.com con il tuo nome di dominio.

server {  
    ...
}
server {  
    ...
    server_name www.esempio.com;
    ...
    ssl_certificate /etc/letsencrypt/live/www.esempio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.esempio.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/www.esempio.com/fullchain.pem;
    include snippets/ssl-params.conf;
    ...
}
server {  
    ...
    server_name esempio.com;
    ...
    ssl_certificate /etc/letsencrypt/live/esempio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/esempio.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/esempio.com/fullchain.pem;
    include snippets/ssl-params.conf;
    ...
}

Prova le impostazioni di Nginx e ricarica Nginx

Innanzitutto, dovremmo controllare per assicurarci che non ci siano errori di sintassi nei nostri file. Possiamo farlo digitando il seguente comando:

$ sudo nginx -t

Possiamo riavviare Nginx per implementare le nostre modifiche:

$ sudo service nginx restart

Modo corretto per eliminare un certificato SSL Certbot

Normalmente, aspetteresti che un certificato scada, ma cosa succede se hai un certificato emesso per un nome di dominio che non ti serve più? Qual è il modo corretto per rimuovere completamente i suoi file dal tuo server?

Quando si eliminano i certificati SSL, non si tratta di eliminare manualmente solo un file. Dovresti passare almeno attraverso le seguenti directory ed eliminare i file associati al nome di dominio.

  • /etc/letsencrypt/archive
  • /etc/letsencrypt/live
  • /etc/letsencrypt/renewal

Comando per eliminare il certificato Certbot

Fortunatamente, esiste una funzione per eseguire l’eliminazione di tutti i riferimenti automaticamente per te. Questo comando offrirà un indice da cui è possibile selezionare il nome di dominio da eliminare:

$ sudo certbot delete

Digita il numero di indice del certificato del nome di dominio che desideri eliminare e premi Invio. Il certificato emesso verrà quindi cancellato.

Un modo più immediato per eliminare un certificato Certbot includendo il nome di dominio è il seguente:

$ sudo certbot delete --cert-name esempio.com

Questo potrebbe essere utile se il nome del dominio non compare nell’indice.

Durata, scadenza e rinnovo dei certificati SSL

Il tuo web server ora utilizza un certificato TLS/SSL gratuito di Let’s Encrypt per offrire contenuti HTTPS in modo sicuro.

Tieni presente che si tratta di certificati a breve termine che scadranno tra 90 giorni. Molte distribuzioni Linux (CentOS, Debian, Fedora, RHEL e Ubuntu) forniscono il rinnovo automatico quando si utilizzano i pacchetti installati tramite il loro gestore di pacchetti di sistema (es apt per Ubuntu).

Se hai installato Certbot su Ubuntu con comando apt (come mostrato in questa guida), non dovrai preoccuparti di rinnovare i certificati perché questa operazione verrà eseguita automaticamente dal sistema.

In alternativa esegui il comando:

$ certbot renew

ogni tanto per rinnovare i certificati che scadono nei prossimi 30 giorni. Puoi anche impostare un cronjob per automatizzare i rinnovi dei certificati.

Conclusione

Ora che hai completato questa guida avrai i siti web protetti da certificati SSL che, come sappiamo da tempo, è uno dei tanti fattori di posizionamento su Google. Come hai visto il processo è semplice e non serve manutenzione particolare.

Per me, per chi fa SEO, ma non solo, è bello poter mettere mano al web server. Sapere come funzionano gli strumenti che rendono possibile internet credo sia una grande opportunità per crescere e per fornire consulenze e servizi sempre più specifici ed avanzati. Dopotutto se ho imparato io a gestire un web server, che non sono un ingegnere informatico, potete farlo tutti!

Ho dimenticato qualcosa oppure vuoi aggiungere qualcosa? Per favore lascia un commento!

Articoli correlati

Autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’expertise di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1123 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Affidati alla nostra esperienza per fare la differenza.
Richiedi un preventivo

Non perderti altre guide, iscriviti per ricevere un avviso mensile con gli aggiornamenti del blog!

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.