un dannato certificato SSL

Partiamo dal concetto che un certificato SSL è una gran rottura. Serve? No, dico, serve davvero? Quanti utenti hanno davvero verificato l’attendibilità del certificato di Facebook? Storciamo il naso solo quando Chrome ci dice che non è affidabile, ma verifichiamo? Qualcuno si, ci mancherebbe, ma probabilmente quel qualcuno è davvero uno molto pignolo o ha un sacco di tempo libero.

Ma i certificati SSL ci sono e dobbiamo usarli.

Lascio stare tutta la parte bla-bla-blosa su quale certificato acquistare. Ce ne sono diversi e con prezzi che vanno da 11€ a 2000€ annui, con funzioalità eccezionali e rete ortopedica in omaggio.

Vai tu a dire ad un cliente che “per la sicurezza dei suoi utenti” deve spendere 2000€ all’anno. ahahahha. no.

Sostanzialmente quindi i certificati che noi umani possiamo acquistare sono due: single SSL  e wildcard.

il single è UN solo dominio. (https://www.dominio.com)

il wildcard è per UN dominio e i suoi sottodomini (https://www.dominio.com, https://store.dominio.com, https://lab.dominio.com, ecc )lucchetto
Attenzione, https://www.dominio.com E’ un sottodominio. quindi se vuoi certificare sia https://www.dominio.com che https://dominio.com, o sono due single SSL o è un wildcard. E la differenza di prezzo si sente.

Va bene, che sia un Single SSL. Facciamo un 100€/anno? Facciamo ‘sto sforzo.

La procedura è abbastanza complessa, con diversi passaggi tra il venditore (es. register.it), l’ente che genera il certificato (CA, Certificate Authority), il “tecnico”, e il proprietario del dominio.

La complessità è dovuta solo ad avere cura in quello che si scrive nei vari form. Se ad esempio scrivi che www.miosito.com è intestato a “Nome Cognome”, e non, come appare nel whois a “Azienda di Nome Cognome”, ti chiameranno da una località assurda del mondo dicendo che devi rifare tutto. Quindi bisogna prestare solo molta attenzione.

Le operazioni da fare te le dirà il venditore, in base al tipo di server che hai e ad una serie di parametri, dopo le telefonate al tecnico e al proprietario del dominio, che dovrai avvisare di dire semplicemente “si, il dominio è mio” (e fidati, avrà 900 paure di sbagliare). il CA ti fornisce una stringa lunghissima alfanumerica che è il certificato. Copialo dove ti dicono di farlo e bohm, habemus certificatem dominium!

 

Ora però dobbiamo pensare a…

Abbiamo il certificato, quindi se digitiamo a manina “https:\\www.dominio.com” il sito apparirà con tutto il suo splendido e luccicoso lucchetto, la scritta https diventerà grigia o verde.. e la pagina si vede. perfetto no?

no.

Schermata 2014-06-25 alle 14.09.08
No, perchè un sito non composto da una sola pagina, non è composto solo dalle immagini, ma anche da tutta una serie di script/risorse/cazziemazzi che sono residenti su ALTRI server, che, ovviamente, potrebbero non essere certificati. Quindi il nostro browser dirà “tu sei certificato, ma gli altri no!” avviso di protezione, alert, aiutoaiutoaiuto.

Cosa bisogna fare? Non ci sono molte alternative: a manina si verificano tutti i collegamenti esterni (fortuna esistono le console dei browser) e si vede quali di questi puntano a http:// (che è il male), quindi verifichiamo che esista anche la versione https:// e sostituiamo. Io ho trovato ad esempio che mettere solo //risorsaesterna.com funziona, ma non ho idea se è lecito e legale, ma quantomeno non ho l’alert.

Nel caso di librerie esterne che non abbiano l’https, si può sempre ricorrere al vecchio download della risorsa, con tanti saluti al collegamento con il server esterno (che però non verrà più aggiornata dallo sviluppatore)

Risolto anche questo punto, occorre reindirizzare il browser dell’utente alla versione certificata del sito. Sconsigliato vivissimamente javascript/php/asp, occorre usare un qualcosa “a monte” quindi diretto sul server.

Prima di tutto spostiamo il traffico verso la versione www, poi verso l’https

Se il server è IIS (7,7.5) con url_rewrite installato:

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
 <rewrite>
 <rules>
 <rule name="Add www" stopProcessing="true">
 <match url="(.*)" ignoreCase="true" />
 <conditions>
 <add input="{HTTP_HOST}" pattern="^dominio.com$" />
 </conditions>
 
 <action type="Redirect" url="http://www.dominio.com/{R:0}" redirectType="Permanent" />
</rule>
 <rule name="Redirect to https" stopProcessing="true">
 <match url="(.*)" />
 <conditions>
 <add input="{HTTPS}" pattern="off" ignoreCase="true" />
 </conditions>
 <action type="Redirect" url="https://www.dominio.com{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
 </rule>
  </rules>
 </rewrite>
 </system.webServer>
</configuration>

Se il server è linux, con .htaccess (necessario il mod_rewrite):

RewriteEngine On
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

(non è testata, non ho un server linux sotto mano)

 

 

 

 


Pubblicato

in

da

Tag: