Non ci sono più scuse: il tuo sito Internet deve avere un certificato HTTPS valido. In caso contrario, i visitatori visualizzano messaggi di avvertimento talmente minacciosi da far abbandonare la navigazione persino ai più impavidi. Ebbene: grazie a Let's Encrypt è possibile ottenere gratis un certificato HTTPS riconosciuto da PC, smartphone, tablet e quant'altro, il tutto in pochissimi passaggi e senza nessuna burocrazia. In questa guida vedremo tutti i passaggi da svolgere, attingendo dall'esperienza decennale di utilizzo di Let's Encrypt su questo sito

Seguendo la presente guida, potrai configurare tutto al meglio e ricevere il rating "A+" da SSL Labs, il tool di riferimento per la verifica delle configurazioni HTTPS. Inoltre, la corretta attivazione di HTTPS tramite Let's Encrypt consente di far scomparire la dicitura Non sicuro da Google Chrome:

» Leggi: Chrome segnala sito "Non sicuro": è davvero pericoloso (virus/malware)? Come risolvere "La connessione a questo sito non è protetta"?

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - certificato https gratis guida Lets Encrypt

Cenni storici: 10+ anni di TurboLab.it con Let's Encrypt

In passato, i gestori dei siti web dovevano pagare decine (o centinaia!) di euro all'anno per acquistare un certificato HTTPS dalle aziende preposte. Inoltre, era necessario svolgere procedure abbastanza tortuose e specifiche per ogni fornitore, da ripetere periodicamente, ogni volta che il certificato scadeva.

D'altro canto, la spesa era necessaria per proteggere tramite crittografia le informazioni scambiate fra il sito e il browser dei visitatori. Senza un certificato HTTPS (tecnologie SSL o TLS), infatti, la comunicazione web viaggia su HTTP "semplice", non crittografato. Questo significa che chiunque riesca ad intercettare il traffico fra sito e visitatore può leggere i dati scambiati, e rubare così le password e le altre credenziali di accesso

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - hacker wi-fi ecommerce spy

Tutto questo è cambiato grazie a Let's Encrypt, progetto lanciato nel 2014 da un'associazione no-profit chiamata Internet Security Research Group (ISRG). Let's Encrypt rilascia infatti automaticamente, immediatamente e gratuitamente certificati HTTPS, utilizzabili da chiunque per rendere sicuro lo scambio di dati su web.

Qui su TurboLab.it utilizziamo Let's Encrypt sin dal 2016 come fornitore unico di certificati HTTPS, e ne siamo estremamente soddisfatti: la compatibilità è ottima, la procedura semplicissima e il fatto che il certificato sia gratuito ben si sposa con l'impostazione "no-profit" del nostro sito.

Questa guida è dunque basata sulla nostra esperienza pratica, sia con questo sito, sia con decine di altri sui quali ho adottato Let's Encrypt durante la mia attività professionale

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - https certificate

Certificato HTTPS gratis, Passo 1: Attivare il sito web

La prima cosa da fare per attivare HTTPS (SSL/TLS) gratuitamente sul tuo sito web è l'installazione del server web e l'attivazione del sito.

Se invece ti serve un certificato SSL/TLS per scopi diversi, fai riferimento a questa alternativa:

» Leggi: Guida a Let's Encrypt tramite validazione DNS su Ubuntu: come ottenere gratis un certificato HTTPS (TLS) con acme-dns-client, per siti Intranet privati o server email (rinnovo automatico)

Se hai già un server web attivo e funzionante passa oltre. In caso contrario, segui una delle nostre guide dedicate per prepararlo ora:

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Ti raccomando caldamente di non andare oltre fino a quando non sarai riuscito a visualizzare perlomeno una pagina HTML statica erogata dal tuo sito.

Certificato HTTPS gratis, Passo 2: Ottenere il nome a dominio

Per ottenere un certificato HTTPS gratuito da Let's Encrypt hai bisogno di un nome a dominio da associare al tuo sito. La maggior parte di noi vorrà usare un dominio di secondo livello, come example.com, ma Let's Encrypt supporta anche i domini di terzo livello, come host1.example.com, o inferiori.

Procedi quindi a registrare il tuo nome a dominio e fare in modo che risolva sull'indirizzo IP del tuo server. Questo generalmente si fa dal pannello web dell'azienda presso la quale hai registrato il dominio stesso. Nell'esempio seguente vediamo la configurazione reale che ho svolto per far sì che il dominio turbolab.it venga risolto nel relativo indirizzo IP del server, 95.141.32.225

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Alcune note di chiarimento:

  1. NON è possibile "falsificare" la registrazione del dominio tramite il file hosts del PC - serve proprio un dominio registrato regolarmente, e pubblicamente accessibile
  2. È possibile utilizzare un nome a dominio dinamico (DDNS), come quelli forniti da Duck DNS oppure integrati nella Vodafone Station e in altri router

Certificato HTTPS gratis, Passo 3: Accedere in SSH

Devi ora connetterti al server che eroga il tuo sito web tramite SSH. Abbiamo visto la procedura completa in questo approfondimento dedicato:

» Leggi: SSH con Windows, Linux, Mac: la Guida Definitiva

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - guida ssh spotlight

Se non disponi dell'accesso SSH al sito web, fai riferimento a questa procedura alternativa:

» Leggi: Guida a Let's Encrypt tramite validazione DNS su Ubuntu: come ottenere gratis un certificato HTTPS (TLS) con acme-dns-client, per siti Intranet privati o server email (rinnovo automatico)

Certificato HTTPS gratis, Passo 4: Installare certbot

Per "chiedere" a Let's Encrypt di generare un certificato HTTPS valido e gratuito si utilizza un protocollo di comunicazione specifico. Sebbene siano disponibili molteplici programmi (client) che implementano tale protocollo, generalmente si utilizza quello chiamato certbot.

Per installare automaticamente la versione più aggiornata di certbot su Ubuntu, basta eseguire:

sudo apt update && sudo apt install curl -y && curl -sL https://turbolab.it/scarica/481 | sudo bash

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Il comando appena impartito esegue uno script (visualizzabile qui) che svolge in sequenza tutte le tediose operazioni che, altrimenti, dovresti svolgere manualmente.

Segnalo che, sebbene certbot sia disponibile anche nei repository ufficiali di Ubuntu e installabile immediatamente tramite apt, lo script utilizza il pacchetto certbot gestito dallo sviluppatore e veicolato sottoforma di snap: è importante procedere in questo modo, perché la versione che si installa tramite apt non è mai aggiornata. Nel momento in cui scrivo, ad esempio, Ubuntu 24.04 offre certbot 2.9.0, mentre via snap si accede alla più moderna 3.2.0.

Per quanto riguarda l'installazione di certbot su Windows o altre piattaforme, così come su distribuzioni Linux diverse da Ubuntu, si veda la pagina ufficiale dello sviluppatore.

Certificato HTTPS gratis, Passo 5: scoprire il percorso su disco nel quale si trova il sito

Per funzionare correttamente, certbot ha bisogno di conoscere il percorso su disco nel quale si trova il sito per il quale vogliamo ottenere il certificato HTTPS.

In condizioni "standard", si tratterà di una cartella sotto /var/www/: se hai seguito le nostre guide a NGINX oppure Apache HTTP Server, dovresti già avere il sito di test raggiungibile nella cartella /var/www/example.com. Ma il percorso è personalizzabile, e dipende da come è configurato il server web

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Per scoprire quale sia il percorso da utilizzare nel tuo caso specifico devi consultare i file di configurazione del server web, che possono trovarsi in uno di questi percorsi:

  • con NGINX installato da repository ufficiale dei suoi sviluppatori (come altamente consigliato nella nostra guida a NGINX): /etc/nginx/conf.d
  • con NGINX installato direttamente da repository di Ubuntu o Debian: /etc/nginx/sites-enabled
  • con NGINX installato su Red Hat Enterprise Linux, Fedora o CentOS: /etc/nginx/conf.d
  • con Apache HTTP Server installato direttamente da repository di Ubuntu o Debian: /etc/apache2/sites-enabled/
  • con Apache HTTP Server installato su Red Hat Enterprise Linux, Fedora o CentOS: /etc/httpd/conf.d/

Non appena hai individuato il file, visualizzane il contenuto. Nel mio caso, ho impartito:

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

Per gli scopi attuali, puoi ignorare tutte le direttive. Quello che ci interessa è solo il percorso al sito, espresso in modo simile a questo:

  • con NGINX: root /var/www/example.com;
  • con Apache HTTP Server: DocumentRoot /var/www/example.com

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Vorrai dunque ignorare la parola root oppure DocumentRoot e copiare il percorso adiacente.

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - apache documentroot

Nel caso di NGINX, fai attenzione a non copiare il punto e virgola (;) finale!

Ora che abbiamo tutte le informazioni necessarie, possiamo finalmente richiedere il certificato.

Certificato HTTPS gratis, Passo 6 per Ubuntu: Richiedere il certificato HTTPS automaticamente

Se stai usando Ubuntu, puoi lanciare una comoda procedura guidata che ti chiederà di inserire le varie informazioni necessarie (dominio per il quale ottenere il certificato, percorso del sito su disco, indirizzo email, ...):

sudo apt update && sudo apt install curl -y && curl -sL https://turbolab.it/scarica/485 | sudo bash

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Il comando appena impartito esegue lo script il cui codice sorgente è visualizzabile qui.

Se, al termine, leggi un titoletto blu con il testo Requesting... seguito poco dopo dal messaggio Successfully received certificate, significa che l'operazione è andata a buon fine. Prosegui nella lettura della presente guida per "attivarlo"

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Se invece ricevi un errore, salta al paragrafo Diagnosticare gli errori, poco più sotto.

Certificato HTTPS gratis, Passo 6 manuale: Richiedere il certificato HTTPS con certbot

Lo script che ho consigliato al Passo precedente funziona solo con Ubuntu. Se l'hai già lanciato, non ti serve altro: prosegui al Passo successivo.

Se però sei in ambiente Windows o Mac, oppure utilizzi una distribuzione diversa da Ubuntu (Red Hat Enterprise Linux, Fedora, CentOS, ...) oppure non vuoi usare lo script per altri motivi, puoi impartire direttamente lo stesso comando che verrebbe composto dallo script:

sudo certbot certonly --email info@example.com --no-eff-email --agree-tos --webroot -w /var/www/example.com -d example.com -d www.example.com --dry-run

Puoi copiarlo tal quale, sostituendo solamente questi valori con i tuoi:

  • --email info@example.com: indica qui la tua email (non è necessario che il dominio della email sia lo stesso per il quale stai richiedendo il certificato). A questo indirizzo potrebbero essere inviate sporadicamente informazioni di servizio, ma mai pubblicità. Usa quindi un indirizzo reale e che controlli periodicamente
  • -w /var/www/example.com: è il percorso su disco nel quale si trova il sito, quello che abbiamo scoperto al passo precedente
  • -d example.com: è il dominio del tuo sito, quello per il quale vuoi ottenere il certificato HTTPS
  • -d www.example.com: se stai richiedendo il certificato per un dominio di secondo livello, molto probabilmente vorrai gestire anche la sua variante "con www.". Aggiungendo questo argomento, il certificato sarà valido sia con, sia senza "www". Probabilmente, vorrai omettere del tutto questo argomento se stai generando un certificato per un dominio di terzo livello, come host1.example.com

Se ricevi un errore, fai riferimento al paragrafo Diagnosticare gli errori, poco più sotto.

Se invece il comando termina con una dicitura simile a The dry run was successful, significa che l'operazione è andata a buon fine! Ora devi solamente ri-eseguirlo omettendo il parametro --dry-run finale

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Siccome abbiamo preventivamente verificato che tutto fosse corretto, ci sono ottime possibilità che termini con la dicitura Successfully received certificate. In tal caso, il tuo certificato HTTPS è pronto all'uso! Prosegui nella lettura della presente guida per "attivarlo".

[ probabilmente ti starai chiedendo: perché usare --dry-run? Non avrei potuto lanciare direttamente il comando "reale"? Ebbene: devi sapere che l'infrastruttura di Let's Encrypt implementa severe restrizioni anti-abuso e, dopo alcuni tentativi falliti, applica un blocco di svariate ore ad ogni ulteriore richiesta originatasi dal nostro server. Questo non avviene se effettuiamo le prove specificando --dry-run, per poi ometterlo solo quando siamo ragionevolmente sicuri che la procedura reale andrà a buon fine ]

In caso di problemi con la generazione del certificato...

In caso il comando di generazione del certificato non funzioni correttamente, è necessario svolgere un po' di analisi per individuare il problema, che generalmente si manifesta con la dicitura Certbot failed to authenticate some domains, seguita da Invalid response from, ed è dovuto a uno di questi due errori:

  1. non hai indicato il percorso corretto su disco nel quale si trova il sito
  2. hai richiesto un certificato HTTPS per un dominio che non è configurato sul server web sul quale stai operando

Nello screenshot seguente trovi un esempio del primo errore: ho mischiato le informazioni. Ho infatti richiesto di generare un certificato per il dominio test.turbolab.it (parametro -d test.turbolab.it), che è realmente erogato da questo server, ma ho erroneamente indicato che il sito si trova nel percorso /var/www/example.com (parametro -w /var/www/example.com)

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

In quest'altro screenshot, invece, ho tentato di richiedere un certificato per il dominio zane.it (parametro -d zane.it). Il dominio è davvero mio, ma il relativo sito non è erogato dal server web sul quale sto operando

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Per aiutarti nella diagnostica, ti raccomando di aprire i log impartendo il comando appropriato:

  • con NGINX su Ubuntu o Debian: sudo tail -f /var/log/syslog /var/log/nginx/*.log /var/log/letsencrypt/letsencrypt.log
  • con NGINX su Red Hat Enterprise Linux, Fedora o CentOS: sudo tail -f /var/log/messages /var/log/nginx/*.log /var/log/letsencrypt/letsencrypt.log
  • con Apache HTTP Server su Ubuntu o Debian: sudo tail -f /var/log/syslog /var/log/apache2/*.log /var/log/letsencrypt/letsencrypt.log
  • con Apache HTTP Server su Red Hat Enterprise Linux, Fedora o CentOS: sudo tail -f /var/log/syslog /var/log/httpd/*.log /var/log/letsencrypt/letsencrypt.log

Il comando manterrà aperti i log principali del sistema, auto-aggiornando in tempo reale la visualizzazione mano a mano che appariranno nuovi messaggi (per uscire: Ctrl+C).

Senza chiudere la finestra di terminale con i log, apri una seconda finestra di Terminale, accedi nuovamente in SSH al server web ed esegui nuovamente lo script automatico oppure il comando con --dry-run, come indicato sopra. Nella finestra dei log potrai vedere tutto quello che succede e, se va bene, trovare un indizio circa lo specifico errore che si sta presentando

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - hacker programmer looking at logs

Certificato HTTPS gratis, Passo 7: Individuare il percorso al certificato

Dopo questa digressione sulla diagnostica degli errori, torniamo al caso "positivo" in cui hai ottenuto il certificato HTTPS valido che ci serve. I file sono stati salvati in un percorso simile a /etc/letsencrypt/live/example.com

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

[ più precisamente: i file veri e propri stanno in /etc/letsencrypt/archive/example.com, ma è bene ignorare completamente questa cartella e lavorare solo con i link agli stessi, che si trovano appunto sotto /etc/letsencrypt/live/example.com ]

Ora dobbiamo solo copia-incollare il percorso a questi file all'interno della configurazione del sito nel nostro server web.

Certificato HTTPS gratis, Passo 8: Aprire la configurazione del sito

Torniamo dunque alla cartella del server web che contiene la configurazione del nostro sito. È la stessa dalla quale abbiamo letto "il percorso su disco nel quale si trova il sito", in precedenza.

Devi ora aprire il file di configurazione del sito nel sito tramite un editor di testi. Impartirai dunque qualcosa di simile a:

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

Fai riferimento alla spiegazione precedente per individuare il tuo file specifico.

Certificato HTTPS gratis, Passo 9 per NGINX: Attivare il certificato HTTPS

Se usi NGINX, le direttive da utilizzare nel tuo blocco server {} sono simili a queste:

  • listen 443 ssl;
  • listen [::]:443 ssl;
  • 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/cert.pem;

Trovi l'esempio completo qui

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - raspberry and desktop pc

Certificato HTTPS gratis, Passo 9 per Apache HTTP Server: Attivare il certificato HTTPS

Se usi Apache HTTP Server, devi innanzitutto prestare attenzione al fatto che il tuo VirtualHost inizi con <VirtualHost *:443>. Se trovi ancora la dicitura <VirtualHost *:80>, devi modificare il numero di porta.

Fatto ciò: le direttive da utilizzare all'interno del tuo VirtualHost sono simili a queste:

  • SSLEngine On
  • SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  • SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
  • SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

Trovi l'esempio completo qui

Certificato HTTPS gratis, Passo 10: "con www." e "senza www."

Se gestisci il tuo sito "sia con, sia senza www." (ad esempio: example.com e www.example.com), magari con un redirect dall'uno all'altro, devi immettere il percorso ai file in entrambi i blocchi di configurazione. In questo modo, il certificato verrà utilizzato indipendentemente dal fatto che i visitatori richiedano l'uno o l'altro, e quindi nessuno dei due mostrerà il messaggio di errore ai visitatori.

Dai un'occhiata ai file di esempio per NGINX oppure per Apache HTTP Server e troverai la configurazione completa

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - planets www vs no-www

Certificato HTTPS gratis, Passo 11: Ricaricare la configurazione del servizio web

Per rendere effettive le modifiche devi ora ricaricare il servizio. Nello specifico, ti consiglio di svolgere un "reload", cioè l'operazione che ricarica la configurazione senza bisogno di riavviare del tutto il servizio, e senza quindi causare alcun disservizio ai client connessi:

  • con NGINX: sudo nginx -t && sudo service nginx reload
  • con Apache HTTP Server su Ubuntu o Debian: sudo apachectl configtest && sudo service apache2 reload
  • con Apache HTTP Server su Red Hat Enterprise Linux, Fedora o CentOS: sudo apachectl configtest && sudo service apache2 reload

Utilizzando uno dei comandi concatenati che ho indicato, il server web verifica prima che la nuova configurazione sia corretta, e solo se va tutto bene effettua il reload, altrimenti mostra i dettagli degli errori, di modo da aiutarti a capire dove devi intervenire.

Certificato HTTPS gratis, Passo 12: Test da client

Arrivati a questo punto, dovrebbe essere tutto pronto! Dal PC locale, visita il tuo sito nel browser web esplicitando https:// prima del dominio: digiterai quindi qualcosa di simile a https://example.com. Dovrebbe rispondere immediatamente la pagina iniziale, senza errori di sicurezza

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

In caso così non fosse, potrebbe essere solo un problema di caching del tuo specifico browser. Valuta di chiudere completamente il browser web e poi riprovare. Se il problema ancora persiste, tenta aprendo una finestra "in Incognito", oppure con un browser web diverso o, meglio ancora, apri il Terminale sul tuo PC locale e impartisci un comando simile al seguente per connetterti da linea di comando:

curl https://example.com --head

[ nota che, se lavori da PowerShell, devi esplicitare curl.exe, o non funzionerà ]

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Se nella risposta è presente anche l'indicazione 200 OK, tutto sta funzionando alla grande.

Se vuoi la certezza che il sito stia effettivamente usando il certificato di Let's Encrypt che hai appena generato:

  1. clicca sull'icona presente all'inizio della barra degli indirizzi del browser
  2. clicca La connessione è sicura
  3. clicca sull'icona del certificato
  4. dalla finestra di dialogo apertasi, dovresti leggere Let's Encrypt

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Certificato HTTPS gratis, Passo 13: Redirect automatico HTTP -> HTTPS

Nella situazione attuale, il nostro sito potrebbe usare HTTPS solamente quando il visitatore lo richiede espressamente digitando https:// nella barra degli indirizzi, ma, se il visitatore lo richiede tramite HTTP, la risposta potrebbe essere in HTTP non-sicuro.

Il condizionale è d'obbligo, dato che non è sempre così. In particolare:

  • se hai configurato il server web seguendo le nostre guide a NGINX oppure ad Apache HTTP Server, è già tutto configurato per eseguire automaticamente l'"upgrade" di qualsiasi richiesta da HTTP ad HTTPS
  • se usi un browser web molto recente, il tuo navigatore tenta comunque automaticamente la connessione HTTPS, anche se non è richiesta
  • alcuni framework PHP si occupano anche di questo

Ad ogni modo: è comunque sempre meglio verificare puntualmente e "disabilitare" esplicitamente HTTP, di modo che qualsiasi richiesta passi per HTTPS. Per raggiungere l'obbiettivo, fai riferimento a questa guida dedicata:

» Leggi: Redirect da HTTP a HTTPS con Apache o Nginx su Ubuntu Server, CentOS o Windows - guida e migliore configurazione webserver pronta all'uso

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Una volta terminata la procedura esposta nalla guida appena indicata, il redirect HTTP->HTTPS è fatto: provando ad aprire una qualsiasi pagina via HTTP avverrà un redirect automatico e del tutto invisibile all'utente verso la "versione" HTTPS. Usando gli strumenti di sviluppo del browser web è possibile verificare la presenza del codice di risposta HTTP 301 che effettua il redirect in questione

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - chrome redirect 301 http https

Certificato HTTPS gratis, Passo 14: attivare HSTS

HTTP Strict Transport Security (HSTS) è un'intestazione (header) inviata dal server al browser del visitatore. Se presente, HSTS indica al client che, da lì in poi, il sito debba essere richiesto sempre e solo via HTTPS, e ogni tentativo di raggiungerlo via HTTP non-sicuro deve essere automaticamente "upgradato" a HTTPS, anche se non richiesto esplicitamente.

È una funzione facile da attivare, che aumenta sensibilmente il livello di sicurezza, oltre a far sì che sia il browser stesso ad aprire ogni pagina via HTTPS, senza bisogno attendere il redirect impostato al passo precedente (che deve comunque essere mantenuto per gestire il primissimo accesso di ogni visitatore).

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - hsts superhero against hacker

Per attivare HSTS basta aggiungere una direttiva specifica all'interno del blocco server {} di NGINX o al <VirtualHost> di Apache HTTP Server.

Apri quindi nuovamente il file di configurazione nel quale hai aggiunto il percorso dei certificati in precedenza e aggiungi quanto segue:

  • con NGINX: add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; (esempio)
  • con Apache HTTP Server: Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" (esempio)

Anche in questo caso: se gestisci il tuo sito "sia con, sia senza www." (ad esempio: example.com e www.example.com), ricordati di aggiungere la direttiva per HSTS ad entrambe le configurazioni.

Ricarica ora il servizio del server web, utilizzando il comando concatenato di "reload" indicato in precedenza.

Da qui in avanti: la primissima connessione di un determinato utente potrebbe ancora avvenire in HTTP. Ma, dalla seconda visita in poi, tutte le sue connessioni avverranno immediatamente in HTTPS, anche se richiederà il sito in HTTP.

Per verificare che HSTS stia funzionando, apri il tuo sito con il browser web regolarmente. Poi apri gli strumenti di sviluppo del browser web stesso, portati alla sezione Rete, e prova a caricare la pagina in HTTP, digitando esplicitamente http://example.com. Dovresti notare la presenza di una "risposta interna" con il codice 307 che rimanda ad HTTPS ed un'ulteriore intestazione Non-Authoritative-Reason: HSTS che conferma la correttezza della configurazione

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

HSTS è importante e dovresti sempre abilitarlo. È bene però sapere che ha implicazioni molto forti. In caso non fosse possibile stabilire la connessione via HTTPS (per via di un certificato scaduto e non rinnovato in tempo, ad esempio) ogni tentativo di accedere al sito verrà bloccata completamente, senza che all'utente sia nemmeno visualizzato un comando "ignora e continua"

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Certificato HTTPS gratis, Passo 15: Test con SSL Labs

Ora la nostra configurazione è davvero completa. Possiamo verificarlo tramite il servizio gratuito di Qualys SSL Labs. Si tratta di una sito che controlla la correttezza delle impostazioni HTTPS di un sito Internet, ne evidenzia la compatibilità, eventuali problemi di sicurezza e, infine, restituisce una valutazione complessiva espressa sottoforma di lettera dell'alfabeto.

Per eseguire il test basta immettere l'indirizzo del proprio sito nel campo di ricerca e premere Submit. Se hai seguito correttamente la presente guida, dovresti ottenere il grado massimo: A+

Certificato HTTPS gratis, Passo 16: rinnovare il certificato HTTPS di Let's Encrypt

I certificati HTTPS di Let's Encrypt hanno una durata relativamente breve: 90 giorni. Questo significa che, entro 3 mesi dalla data di generazione, dovrai procedere con il rinnovo (vedremo al passo successivo come automatizzare). In caso contrario, i visitatori visualizzeranno un minaccioso avviso di sicurezza, che impedirà ai più di procedere con la propria visita.

certbot prevede un apposito parametro che si occupa di controllare tutti i certificati installati sul server e rinnovare quelli in scadenza. Per eseguirlo immediatamente, senza incorrere nel rischio di essere bloccati, usiamo la già trattata opzione --dry-run:

sudo certbot renew --dry-run

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Se l'operazione termina correttamente e leggi un messaggio simile a Congratulations, all simulated renewals succeeded, possiamo stare ragionevolmente tranquilli che, al momento opportuno, funzionerà correttamente semplicemente re-impartendo:

sudo certbot renew

Da notare che è possibile rinnovare solamente i certificati in scadenza entro i prossimi 30 giorni. Certificati in corso di validità, ma in scadenza dopo i prossimi 30 giorni, non vengono rinnovati.

Una volta eseguito il rinnovo, non sarà necessario apportare altre modifiche alla configurazione, ma sarà tassativo ricaricare il servizio web tramite il comando di reload visto in precedenza. In caso contrario, il processo del server web continuerà ad utilizzare il certificato scaduto, generando l'errore.

  • se hai usato lo script di installazione di certbot per Ubuntu consigliato ad inizio articolo, questa incombenza verrà gestita in automatico
  • se hai installato certbot manualmente, dovrai farlo manualmente (oppure seguire questa procedura)

Certificato HTTPS gratis, Passo 17: Rinnovo automatico e riavvio del servizio web

Fortunatamente, non è necessario ricordarsi di rinnovare manualmente i certificati. La procedura di installazione di certbot installa infatti un timer che lo fa automaticamente. È comunque bene assicurarsi che detto timer sia al proprio posto. Possiamo farlo facilmente impartendo:

systemctl list-timers --all | grep certbot

Se il risultato ha un aspetto simile al seguente, è installato correttamente. Si noti, in particolare, l'indicazione dell'orario: indica il momento in cui verrà nuovamente eseguita la procedura, e quanto manca a tale scadenza

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

Rimane valido quanto ricordato sopra: nemmeno il timer ricarica il servizio di NGINX o Apache HTTP Server, con il risultato che il server web continua ad utilizzare il vecchio certificato anche dopo la scadenza, nonostante quello nuovo sia già pronto e disponibile sul disco locale. Se però hai usato lo script di installazione di certbot per Ubuntu consigliato ad inizio articolo, questa lacuna è già stata gestita grazie allo script copiato nel percorso

/etc/letsencrypt/renewal-hooks/deploy/webstackup-certificate-renewal-action.sh

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video)

In caso contrario, è imperativo svolgere la procedura dettagliata in quest'altra guida per fare in modo che ciò avvenga:

» Leggi: Let's Encrypt con Nginx o Apache: come rinnovare automaticamente il certificato HTTPS e ricaricare il server web dopo il rinnovo

Come ottenere certificato HTTPS (SSL/TLS) gratis: Grande Guida Let's Encrypt Linux/Ubuntu (video) - let's encrypt rinnovo restart nginx spotlight

Fonti

Se hai seguito la guida fino a qui, probabilmente sei riuscito a configurare NGINX o Apache HTTP Server per erogare un sito tramite HTTPS utilizzando un certificato SSL/TLS gratuito. Complimenti!

Ma il mondo della crittografia applicata al web è davvero smisurato. Per approfondire l'argomento, segnalo le fonti principali che ho consultato per redigere la guida:

Un ringraziamento particolare va ai colleghi hashcat per il costante lavoro di affinamento ed analisi della configurazione HTTPS di TurboLab.it e a developerwinme per aver segnalato Let's Encrypt sul nostro forum per la prima volta, nel 2015.

Segnalazioni, precisazioni suggerimenti

Se hai trovato un errore o credi sia possibile migliorare la guida in qualsiasi altro modo, lascia un commento di seguito: tornerà sicuramente utile a qualcuno! Grazie per la partecipazione!