Nell’ultimo anno c’è stata una spinta da parte delle Big Data (Google su tutti) a fare in modo che i siti si dotino della connessione SSL. Una delle questioni spinose è che pian piano il noto motore di ricerca sta dando più importanza nelle ricerche a chi è dotato di connessione criptata. La motivazione di queste scelte in realtà è ben più alta, le riassumiamo brevemente in questi punti
- Un sito dotato di certificato SSL permette la connessione cifrata delle informazioni tra il nostro sito e l’utente che lo sta consultando. Si potrà evitare quindi che le informazioni vengano intercettate nel tragitto che va dal nostro computer al server, e che possano essere contraffatte.
- Il sito è certificato nella sua autenticità, per cui chi lo consulta è sicuro che, ad esempio, tosolini.info sarà proprio lui e non un clone modificato ad arte, ad esempio per veicolare codice malevolo, o utilizzare la tecnica del phishing per circuire l’utenza.
- Si migliora la sensazione di sicurezza che viene fornita all’utente. Vedere il lucchetto verde vicino alla URL tende a dare fiducia.
- Come già detto, avere un certificato SSL ci permetterà di non retrocedere nei risultati di Google in primis.
Ma un certificato costa, e anche parecchi soldi e se non siamo un sito di ECommerce o EBanking dove questo tipo di tecnologia è obbligatoria, non ha molto senso investire danaro. Per questo è stato istituito un consorzio dove praticamente tutti i Big fanno parte, per fornire in modo gratuito certificati SSL a chi ne fa richiesta. Il consorzio si chiama “Let’s Encrypt” con sede a San Francisco e dopo un periodo di rodaggio è uscito con un software che permette in pochissimi passi di richiedere, firmare ed installare praticamente in modo automatico, il certificato per il proprio dominio.
Qui c’è subito da mettere un paletto, per dotarsi di questo certificato dovete avere un server proprio, oppure chiedere al vostro Hosting Provider che lo installi sul server. Le spiegazioni che seguiranno sono relative ad un server proprio (distribuzione Ubuntu con Apache webserver) e i passi sono quelli effettuati per installarlo su Tosolini.info
Per prima cosa aggiornare il sistema operativo alle ultime patch disponibili. Quindi sinceriamoci di aver attivato il modulo SSL di apache
sudo a2enmod ssl
Se avete più domini eventualmente preparate anche i relativi Vhost di Apache, se ne avete uno potete affidarvi al default-ssl.conf. Prendendo per buono l’esempio che abbiamo solo il default-ssl possiamo attivarlo.
sudo a2ensite default-ssl
sudo service apache2 reload
Fate attenzione perché il default-ssl.conf non è attrezzato per gestire il mod_rewrite. Dovrete aggiungere a mano la parte relativa (subito dopo le dichiarazioni dei logs):
Options Includes FollowSymLinks MultiViews
AllowOverride All
Require all granted
Facciamo un controllo empirico che la connessione ssl sia attiva, ad esempio cercando https://tosolini.info (dove andrete a scrivere ovviamente con il vostro nome di dominio) oppure con il comando
netstat -vantp | grep 443
dovremo vederci restituita una linea di risposta, ad esempio:
tcp6 0 0 :::443 :::* LISTEN 1034/apache2
Ok Apache ascolta e processa sulla porta corretta. Finalmente possiamo scaricare ed installare il software CertBot di Letsencrypt.
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
A questo punto possiamo avviare il programma
sudo sh certbot-auto --apache
Lo script chiederà di installare un certo numero di pacchetti
The following extra packages will be installed:
binutils cpp cpp-4.8 gcc-4.8 libasan0 libatomic1 libc-dev-bin libc6-dev
libcloog-isl4 libexpat1-dev libgcc-4.8-dev libisl10 libitm1 libmpc3 libmpfr4
libpython-dev libpython2.7-dev libquadmath0 libtsan0 linux-libc-dev
python-setuptools python2.7-dev zlib1g-dev
Suggested packages:
augeas-doc binutils-doc cpp-doc gcc-4.8-locales gcc-multilib make
manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc
gcc-4.8-multilib gcc-4.8-doc libgcc1-dbg libgomp1-dbg libitm1-dbg
libatomic1-dbg libasan0-dbg libtsan0-dbg libquadmath0-dbg augeas-tools
glibc-doc
Recommended packages:
libssl-doc python-pip
The following NEW packages will be installed:
augeas-lenses binutils cpp cpp-4.8 dialog gcc gcc-4.8 libasan0 libatomic1
libaugeas0 libc-dev-bin libc6-dev libcloog-isl4 libexpat1-dev libffi-dev
libgcc-4.8-dev libisl10 libitm1 libmpc3 libmpfr4 libpython-dev
libpython2.7-dev libquadmath0 libssl-dev libtsan0 linux-libc-dev python-dev
python-setuptools python-virtualenv python2.7-dev zlib1g-dev
0 upgraded, 31 newly installed, 0 to remove and 4 not upgraded.
Need to get 43.4 MB of archives.
After this operation, 116 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Dopo l’installazione lo script andrà a leggere i nostri Vhost di Apache e troverà i nomi di dominio che stanno servendo questa macchina. Ed è qui che vi proporrà di creare dei certificati, potrete scegliere se utilizzarlo per tutti i domini elencati o solo uno in particolare. Al resto penserà tutto lui, installare le chiavi private e pubbliche e configurare i Vhost.
La schermata successiva prospetta due opzioni, una di tipo “easy” ovvero l’utilizzo promiscuo con e senza https, oppure una modalità “secure” dove è consentito solo l’utilizzo criptato. Vi consiglio quest’ultima. Segue una richiesta di un indirizzo email valido, in caso di problemi dovremo poter essere rintracciabili, e quindi del classico “accetta la licenza e il codice di condotta”.
A questo punto il nostro server starà già convertendo le chiamate delle connessioni web in chiaro a quelle criptate. Possiamo passare a WordPress e qui iniziano le rogne.
Per prima cosa vi consiglio di ripulire i cookie dal vostro browser. Proviamo a collegarci alla parte client del sito, è probabile che non vedremo nessun lucchetto verde, ma uno bianco vicino alla URL. Significa la pagina sta cercando di caricare dei riferimenti interni o esterni in http anziché in https. Con il debugger di Chrome o Firefox guardate che il vostro tema non carichi oggetti esterni che potrebbero essere in SSL anch’essi, ad esempio librerie di Google o Facebook sono tutte utilizzabili in modo criptato.
Ora la parte più complessa, i riferimenti interni di WordPress sono tutti in chiaro e dovranno essere modificati. Questi riferimenti sono memorizzati nel DataBase per cui per prima cosa un bel backup del vostro MySQL. Da linea di comando o da phpMyAdmin (consigliato) dovremo dare i seguenti comandi SQL
UPDATE `wp_comments` SET `comment_author_url` = replace(comment_author_url, 'http://www.tosolini.info', 'https://www.tosolini.info');
UPDATE `wp_comments` SET `comment_content` = replace(comment_content, 'http://www.tosolini.info', 'https://www.tosolini.info');
UPDATE `wp_options` SET `option_value` = replace(option_value, 'http://www.tosolini.info', 'https://www.tosolini.info');
UPDATE `wp_postmeta` SET `meta_value` = replace(meta_value, 'http://www.tosolini.info', 'https://www.tosolini.info');
UPDATE `wp_posts` SET `post_content` = replace(post_content, 'http://www.tosolini.info', 'https://www.tosolini.info');
UPDATE `wp_posts` SET `guid` = replace(guid, 'http://www.tosolini.info', 'https://www.tosolini.info');
Avendo cura di modificare il nome del dominio… con questi comandi andremo a cambiare in un colpo solo tutte le referenze interne. Nel caso abbiate dei plugin che facciano uso di file interni, dovrete modificare, creando un nuovo UPDATE con la tabella e la referenza dove effettuare il cambio.
Nel caso di un ambiente in multisite dovrete aggiungere e modificare le righe di cui sopra oltre che al dominio principale ai sottodomini. Ad esempio wp_comments diventerà wp_2_comments per il secondo multisite (non dimenticate il sottodominio) e così via. Di solito sono in ordine di creazione, per cui da “gestione siti – tutti i siti” dovremmo trovarli nell’ordine giusto.
Va poi aggiunta la seguente riga che modifica il sitemeta relativa appunto al sito base del multisite:
UPDATE `wp_sitemeta` SET `meta_value` = replace(meta_value, 'http://www.tosolini.info', 'https://www.tosolini.info');
Un controllo ai file .htaccess e al file wp-config.php, se ci sono riferimenti in http vanno modificati.
Se avete installato Jetpack è consigliabile andare nelle impostazioni e scollegare quindi ricollegare il sito.
A questo punto ci dovremo trovare, al netto di plugin e temi fastidiosi, il famigerato lucchetto verde nella barra delle URL. Si tratta di una procedura apparentemente complessa, ma a lavoro finito vi renderete conto che non era così difficile.