Salta al contenuto ID

Cambiare il sito da http a https

Google da gennaio 2017 obbliga tutti i siti web a dotarsi di un certificato SSL, quindi Chrome ma anche Firefox e altri browser hanno iniziato a indicare i siti “http” come non sicuri, vulnerabili.
In questo articolo non mi dilungo sui motivi per cui bisogna portare i siti web in “https”, do per scontato che tutto è chiaro e si deve fare il lavoro. Iniziamo con la checklist:

  1. Dotarsi di un certificato SSL, molti hosting lo offrono gratis con Let’s Encrypt.
  2. Adeguare il proprio DNS e attivare Let’s Encrypt.
  3. Adeguare il proprio sito affinché lavori con https (con note speciali per i siti Contao e Prestashop).
  4. Adeguare Google Analytics e Google Search Console

1. Il certificato SSL

Il certificato SSL viene dato con un costo aggiuntivo annuale attorno i 30 euro, ce ne sono anche di più costosi perché dipende se sono certificati DV (Domain Validated) oppure OV (Organization Validated) e da che ente certificatore li emette (Certification Authority). tuttavia esiste anche una versione gratis offerta dalla CA Let’s Encrypt. Inoltre cPanel ha un plugin che ne facilita l’installazione (si ottiene il certificato con un click).
Mi sono aggiornato sulle offerte 2017 di vari Hosting Provider, mi sono accorto che i piani sono stati aggiornati includendo SSL gratuitamente proprio grazie a questa interessante iniziativa (Aruba non nomina che certificato DV sta offrendo, ma sospetto si tratti sempre di Let’s Encrypt).

Aruba: https://hosting.aruba.it/hosting/linux.aspx (più precisamente: https://hosting.aruba.it/hosting/servizi-inclusi/certificati-ssl-dv.aspx)

Netsons: https://www.netsons.com/hosting.php (Supporto Let’s encrypt, più precisamente: https://www.netsons.com/lets-encrypt.php)

Keliweb: https://www.keliweb.it/hosting/ (Supporto Let’s encrypt)

Ergonet: https://www.ergonet.it/ (Supporto Let’s encrypt)

Quindi oggi è davvero facile ottenere il servizio, credo sia possibile aggiungerlo anche nei piani vecchi.

2. Adeguare il DNS e attivare Let’s Encrypt

Confrontandomi con il mio hosting ho saputo che Let’s Encrypt vuole un Alias oltre al dominio (quindi si intende il canonico www). Inoltre, questo non va bene inserirlo tramite un CNAME (alias) perché potrebbe avvenire un errore al rinnovo automatico del certificato. Quindi, dobbiamo controllare il DNS affinchè ci siano due record A, uno per la versione “dominio.com” e l’altro per la versione “www.dominio.com”. Adeguato questo si può andare nel pannello per aggiungere Let’s Encrypt.

Io ho una gestione con cPanel (per Aruba e altri pannelli forse inserirò altre note in futuro), il plugin si trova nella sezione Sicurezza.
Il pannello del plugin si presenta come nella figura sottostante, c’è un bottone New SSL Certificate da premere per aggiungere un dominio, poi si sceglie anche l’alias www con il campo a selezione multipla “Select Alt-Domains“. Si salva premendo il bottone Submit, in 10 secondi è tutto finito. Il rinnovo sarà automatico allo scadere dei giorni indicati.

3. Adeguare il sito forzando https

Il lavoro non è finito con l’attivazione di Let’s Encrypt, è normale che il sito web adesso funzioni con e senza SSL, e in alcuni casi vediamo che il sito continua a funzionare forzandoci a vedere solo http. Dobbiamo fare in modo che il sito utilizzi solamente https altrimenti i nostri sforzi saranno stati inutili.

Inizio con delle informazioni generiche, valide per qualsiasi sito web, nel mio caso sto modificando un sito col CMS Contao (se invece usi Prestashop, o WordPress passa alle istruzioni specifiche più avanti). In pratica dobbiamo modificare il file .htaccess affinché compia un redirect 301 per le richieste http verso https. Per farlo basta usare il seguente codice, da mettere subito dopo l’istruzione “RewriteEngine On” (se non c’è mettila).

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Da questo momento vedrai che il sito funziona con e senza www, mandando verso la rispettiva versione https. Se non vuoi che il sito sia “duplicato”, e vuoi mandare tutte le richieste alla sola versione senza www (a me piace fare così) allora va usata la seguente regola.

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Al contrario, se vuoi forzare l’URL con il prefisso “www.” la regola cambia alla seconda e quarta riga:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Ora serve una verifica di tutte le risorse (immagini, js, css) caricate nelle varie pagine. Normalmente con i path relativi è tutto a posto, ma se ci sono path assoluti, scritti a mano nel codice, o salvati nelle aree editabili di un CMS, allora il browser ci indica ancora problemi di sicurezza con il sito web, perché trova questi file con i path che contengono “http://” invece di “https://”.

Ecco cosa appare con Firefox.

Ecco come scoprire quali sono questi file “non sicuri” utilizzando la Console.

In pratica sono tutte immagini del blog. Quando hai questo problema devi cercare di capire da cosa dipende il percorso sbagliato, e quindi correggere.

Aggiustiamo i problemi in Prestashop…

Se usi Prestashop non devi fare modifiche al file .htaccess, basta aggiustare la configurazione in Preferenze – Generali.
Attiva le due opzioni come in figura sottostante (se ti eri loggato via http ci sarà un link “Clicca qui per controllare che il tuo negozio supporti HTTPS.”, puoi cliccarlo, ti cambierà l’area admin da http a https).

Fatto questo serve sempre la verifica del sito. Infatti ho notato alcuni contenuti che caricavano banner via http, sono andato nell’editor del modulo e ho corretto da codice sorgente come in figura seguente.

Oltre a questo è possibile che ci siano tante immagini salvate all’interno delle pagine CMS o, peggio, delle schede prodotto. Se i prodotti sono centinaia è chiaro che non sia possibile intervenire su tutti singolarmente, a meno che non si voglia perdere tempo inutilmente.
Per correggere tutti i percorsi in pochi secondi è necessario lanciare una query SQL al database, quindi accedi nel tool PHPMyAdmin del tuo hosting ed esegui un REPLACE di tutte le occorrenze che contengono i percorsi errati. Fai un backup di sicurezza prima di iniziare. L’istruzione seguente serve per sostituire tutti i percorsi nel campo “description” della tabella “product_lang”, cioè il contenuto delle descrizioni dei prodotti (ovviamente devi cambiare le stringhe con i percorsi che servono a te).

UPDATE `ps_product_lang` SET `description` = replace( `description` , 'http://zorzipet.com/img/', 'https://zorzipet.com/img/' )

Infine c’era un modulo difettoso che elencava i blog con le immagini sbagliate, sono gli screenshot che ho riportato poco fa. Il problema era causato dal codice PHP del modulo, usava la costante “_PS_BASE_URL_” invece di “_PS_BASE_URL_SSL_“. Prestashop infatti ha due costanti, le definisce nella funzione init() del file “classes/controller/Controller.php”, figura sottostante. Se alcuni moduli funzionano male, è probabile che abbiano lo stesso difetto.

Aggiustiamo i problemi in WordPress…

Per convertire il sito in https è molto semplice, basta andare in Impostazioni -> Generali, e modificare i due campi del percorso del sito. Salvare.

In versioni più obsolete di WordPress l’area admin rimaneva http, ed era necessario aggiungere in wp-config.php questa stringa:

define('FORCE_SSL_ADMIN', true);

Dovrebbe essere tutto a posto, ma in alcuni WordPress potrebbe esserci ancora un problema: tutte le risorse caricate nelle pagine, come i file css e js hanno ancora i percorsi con http. Bisogna quindi aprire il file .htaccess in root del sito e trovare il pezzo subito dopo “RewriteEngine on”. Vanno aggiunte queste due righe, come evidenziato in immagine (se questo da problemi di reindirizzamento non lo fare).

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

oppure

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

Ultimo controllo: verifica se ci sono altri file caricati con percorso assoluto e correggi in base al caso. Puoi usare anche plugin come Better Search And Replace, per sostituire in massa tutti i percorsi in database.

4. Adeguare Google Analytics e Google Search Console

Abbiamo un ultimo ma importante compito: dobbiamo dire a Google che il sito è cambiato.

Per adeguare Google Analytics è proprio semplice, si tratta di un passaggio da 20 secondi. Bisogna andare in amministrazione della Proprietà. Cambiare il campo “URL predefinito” da http a https. Salvare.

Per adeguare Google Search Console purtroppo non è così immediato, non ho capito perché Google non abbia reso più semplice la faccenda, sta di fatto che le Proprietà non possono essere modificate. Quindi vanno cancellate, e dobbiamo aggiungerne una nuova per il sito con versione “https”. Poco male, la procedura è identica, la verifica dovrebbe essere istantanea perché riprende il metodo di verifica precedente. Quindi si passa all’inserimento della sitemap, si carica quella nuova con https. Le indicizzazioni ripartono da zero.

Non è finita! Dobbiamo collegare Search Console con Analytics, https con https.
Quindi clicca sulla ghiera in alto a destra, poi Proprietà di Google Analytics.

A questo punto clicca sul radio button che associa la proprietà di Analytics con il sito Search Console. Questo sovrascriverà l’eventuale collegamento precedente (delle versioni http). Salva.

 

Con questo è tutto. L’operazione di conversione del sito a SSL è conclusa. Buon lavoro.

Questo articolo ha 0 commenti

Lascia un commento

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

Torna su