Attivare HTTPS su WebFaction con Let’s Encrypt

L’HyperText Trasfer Protocol (HTTP) è il cardine di tutte le comunicazioni sul World Wide Web ed il suo sviluppo ebbe inizio nel 1989, con il lavoro di Tim Berners-Lee al CERN. Le comunicazioni instaurate con il solo HTTP avvengono in chiaro e possono essere intercettate con opportuni sistemi; per …

Pubblicato da Roberto Fusi in Internet. Aggiornato .
Lunghezza testo: 815 parole. Stima tempo lettura: 4 minuti.
Tag: privacy, apache, pelican. .

L’HyperText Trasfer Protocol (HTTP) è il cardine di tutte le comunicazioni sul World Wide Web ed il suo sviluppo ebbe inizio nel 1989, con il lavoro di Tim Berners-Lee al CERN. Le comunicazioni instaurate con il solo HTTP avvengono in chiaro e possono essere intercettate con opportuni sistemi; per aggiungere la crittografia, si usa TLS e si ottiene HTTPS (HTTP Secure).

Il Transport Layer Security (TSL) è un protocollo di crittografia usato per proteggere le comunicazioni in una rete informatica. Di solito, i siti Web usano TSL per criptare i dati scambiati fra il server HTTP ed il browser, assicurandone l’autenticità, l’integrità e salvaguardando la privacy. Inoltre, Google privilegia i siti sicuri e gli riconosce un miglior posizionamento nei risultati delle ricerche.

Per stabilire una comunicazione criptata, il server HTTP ed il browser dell’utente cominciano col concordare quale cifrario usare, e condividono una chiave di cifratura pubblica, che viene comunicata dal server HTTP al browser, in un certificato digitale. Successivamente, il browser conferma la validità del certificato, cripta un numero arbitrario usando la chiave di cifratura pubblica e lo trasmette al server. Il server decripta il messaggio usando la sua chiave di cifratura privata: a questo punto, sia il server che il browser usano il numero arbitrario per generare una chiave unica di sessione per criptare e decriptare tutte le successive trasmissioni di dati.

Ho deciso di attivare il protocollo HTTPS per proteggere le sessioni di navigazione degli utenti su questo blog. Mi sono procurato un certificato digitale tramite Let’s Encrypt, una Autorità che rilascia certificati gratuitamente ed è sponsorizzata da diverse società private fra cui CISCO e la fondazione Mozilla.

Come ottenere un certificato SSL gratis ed installarlo con letsencrypt-webfaction

Per ottenere un certificato da Let’s Encrypt, occorre dimostrare di avere il controllo di un sito usando un apposito programma. Siccome uso WebFaction, ho impiegato lo script Ruby letsencrypt-webfaction sviluppato da William Johnston.

Per usare questo script, mi sono collegato al server del mio sito via SSH usando PuTTY (un client SSH per Windows) ed ho eseguito questa procedura:

Per prima cosa, ho installato letsencrypt-webfaction eseguendo la seguente istruzione nella shell di PuTTY.

GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.2 install letsencrypt_webfaction

installazione di  letsencrypt-webfaction

Poi, ho modificato il file .bash_profile con GNU nano, eseguito nella shell di PuTTY, in modo da aggiungere la seguente funzione.

function letsencrypt_webfaction {
  PATH=$PATH:$GEM_HOME/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
}

configurazione .bash_profile

Ho salvato le modifiche a .bash_profile e sono ritornato al prompt dei comandi in PuTTY, ed ho applicato le nuove impostazioni.

source $HOME/.bash_profile

A questo punto, ho eseguito lo script letsencrypt-webfaction personalizzando opportunamente la seguente istruzione.

letsencrypt_webfaction --letsencrypt_account_email <email-address> --domains <domain[,domain[,domain...]]> --public <server-folder> --username <webfaction-username> --password <webfaction-password>

Si noti che:

  • email-address è l’indirizzo email che è associato con il certificato (per esempio, ho indicato il mio indirizzo @gmail.com)
  • domain[,domain[,domain…]] è l’elenco dei domini per i quali si vogliono i certificati (per esempio: www.ipertesti.com, ipertesti.com)
  • server-folder è il percorso di sistema alla directory radice del sito web (per esempio: ~/webapps/static_ipertesti_com)

Lo script termina l’esecuzione senza messaggi d’errore o di stato. Controllo quindi la radice del mio sito (~/webapps/static_ipertesti_com), e noto che è stata creata la nuova cartella .well-known contenente dei file generati dallo script.

Accedo al Control Panel di WebFaction con il browser e verifico che nella sezione DOMAINS / WEBSITES > SSL certificates è ora disponibile un certificato valido per 90 giorni.

certificato SSL

Per attivare la connessione HTTPS del sito, ho attivato il pulsante Encrypted website (https) e disabilitato Enable gzip nella sezione DOMAINS / WEBSITES > Websites.

attivazione sito HTTPS

Dopo qualche minuto, il sito non è più raggiungibile con http://, ma solo con https://; occorre quindi reindirizzare tutte le richieste http:// ad https:// con la seguente procedura:

  1. creo una nuova applicazione statica del tipo Static/CGI/PHP-…. tramite la sezione DOMAINS / WEBSITES > Applications;
  2. creo un nuovo sito nella sezione DOMAINS / WEBSITES > Websites e vi associo l’applicazione statica creata al punto 1;
  3. modifico il file .htaccess nella directory radice del sito creato al punto 2 e vi includo il seguente codice.
    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-SSL} !on
    RewriteCond %{REQUEST_URI} !^/\.well\-known/
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

Grazie all’API di WebFaction e Cron è possibile rinnovare periodicamente il certificato SSL. Basta editare il crontab con il seguente comando:

crontab -e

Ed aggiungere la seguente istruzione, fatte le opportune correzioni:

0 4 1 */2 * PATH=$PATH:$GEM_HOME/bin:/usr/local/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction --letsencrypt_account_email [you@youremail.com] --domains [yourdomain.com,www.yourdomain.com] --public ~/webapps/[yourapp/your_public_html]/

In questo modo il sistema cercherà di rinnovare il certificato alle ore 4:00 del primo giorno di Gennaio, Marzo, Maggio, Luglio, Settembre e Novembre.

Per verificare i cron attivi, si usa il comando:

crontab -l

Per finire, ho aggiornato la variabile SITEURL = ‘https://www…’ in publishconf.py del sito Pelican, ed ho rigenerato e ripubblicato i file del sito sul server per usare il nuovo protocollo.

Riferimenti

  1. Hypertext Transfer Protocol
  2. HTTPS
  3. Transport Layer Security
  4. Let’s Encrypt
  5. WebFaction Blog
  6. WebFaction
  7. Crittografia
  8. Cifrario
  9. Public Key Infrastructure
  10. certbot for Apache on CentOS/RHEL 7
  11. GitHub letsencrypt-webfaction
  12. SSL, GONE IN 30 SECONDS
  13. Static redirecting from HTTP-to-HTTPS
  14. Cron
  15. Apache Module mod_rewrite

Libri suggeriti

Condividi questo articolo

Se ti è piaciuto questo articolo e pensi possa essere utile anche ad altri, condividilo con i tuoi amici e conoscenti, facendo click sui pulsanti dei tuoi social network preferiti.

P.S. Grazie!

Commenti

Cosa pensi di questo articolo? Hai dei suggerimenti da darmi o vuoi segnalare la tua esperienza in questa pagina? Registrati con Disqus ed inserisci il tuo commento qui sotto!

Inoltre, se lo desideri puoi anche scrivermi una e-mail.

Presentazione

IpeRteSTi é un blog curato da Roberto Fusi. Raccoglie suggerimenti ed esperienze personali riguardo Internet, Web Development e la Digital Economy.

Seguimi sui social

LinkedInTwitterGooglePlusFeedburner for IpeRteSTi

Iscriviti alla mia newsletter