Site icon Tosolini.info

WordPress con SSL gratis

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

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.

Exit mobile version