Con questa piccola guida vogliamo fare un po’ di chiarezza su quello che sono i server certificati e come poter certificare il proprio.
Navigando, infatti, capita spesso (senza che ce ne accorgiamo in realtà) che la nostra comunicazione con un particolare server venga cifrata, si passi cioè in automatico da una connessione e comunicazione su HTTP ad una su Secure HTTP. HTTPS è sostanzialmente identico al protocollo HTTP con un livello di certificazione/cifratura dei messaggi scambiati fra client e server (attraverso il protocollo SSL), quindi fra noi e il server con cui stiamo parlando.
Immaginiamo per esempio di accedere al server della nostra banca per effettuare un bonifico, o su un sito di E-Commerce per comprare un articolo, se la comunicazione non fosse messa in sicurezza, un qualsiasi utente della rete sarebbe in grado di “sniffare” il nostro traffico e leggere tutti i pacchetti che noi stiamo scambiando con uno di questi due server. In tali pacchetti sarà ovviamente contenuto anche il codice di accesso al sito web della nostra banca e i dati (TUTTI) della nostra carta di credito (per informazioni al riguardo leggere su Wikipedia Man in the middle
Non è pensabile quindi, in casi come questo, comunicare in chiaro con il server (e soprattutto non dovete fidarvi troppo di siti che vi chiedono il codice della carta di credito e non hanno un minimo livello di sicurezza).
Cosa succede davvero fra client e server in questi casi?
Innanzitutto il gestore del server, per poter “spostare” la comunicazione su HTTPS, deve creare un certificato, qualcosa che cioè possa appurare l’identità di una persona ed associarvi una chiave di cifratura. Ottenuto il certificato (vedremo poi nel dettaglio come fare) lo dovrà installare sul proprio server (o chiedere che il gestore lo faccia per lui). Da questo momento in poi tutto avverrà nell’assoluta segretezza.
Quando voi andrete a ri-interrogare il “sito web” il browser si accorgerà della presenza del certificato e saprà che dovrà andare a comunicare con il server su una connessione sicura (un po’ come una spia, per non farsi intercettare) utilizzando la chiave fornita. Prima di fare questo però contatterà (in automatico ovviamente) “un tizio” che gli confermerà se il certificato ricevuto è autentico o meno. L’alternativa, che però rende ancora vulnerabili ad un attacco, è una cifratura mediante chiave pubblica. Il server con cui vogliamo comunicare ci inviarà direttamente la chiave per cifrare i messaggi. E’ però evidente che se qualcuno fosse in ascolto e carpisse la chiave inviata, sarebbe comunque in grado di decifrare la nostra comunicazione.
Supponiamo che la nostra chiave sia stata confermata e sottoscritta anche dal “tizio” di cui sopra. Se il browser non riuscisse ad ottenere una conferma per il certificato, presenterà un messaggio d’errore: “non riesco a trovare l’identità di questo tipo”; sarà poi l’utente a dover decidere se proseguire con la navigazione su quel sito, oppure abbandonarlo.
Il “tizio” di cui parlo sopra si chiama in realtà “Certification Authority” ed è l’ente preposto a garantire la sicurezza di tale certificato; lo rilascerà seguendo uno standard ben definito contenente tutte le informazioni necessarie per far capire (all’utente soprattutto) chi siete e cosa fate. Il vostro browser, se andate a controllare nelle impostazioni, contiene già per default una lista di Certification Authorities “fidate” che contatterà ogni qualvolta ve ne sarà bisogno; potrete andare a cambiare tale lista aggiungendo o rimuovendo server, perchè la cosa rimanga sicura dovete però sapere con precisione cosa e chi sta andando ad aggiungere.
Come fare per rendere sicuro il vostro sito web?
Innanzitutto valutate se ne avete davvero la necessità. Se siete gli amministratori di un blog, probabilmente non ha senso aggiungere qualcosa che certifichi che il blog sia davvero il vostro… sarebbe certo una cosa Geekkosa ma l’utilità è dubbia.
Se ad ogni modo (se proprio volete un blog certificato fatelo) ritenete di aver bisogno che di un sito web messo in sicurezza, allora i passi da seguire sono (abbastanza) semplici.
Innanzitutto, come la maggior parte delle persone che dispongono di un sito web, lo hanno acquistato come Hosting presso qualche società (non facciamo pubblicità per dare esempi, ma credo che tutti sappiati di chi e cosa stiamo parlando). In questo caso, essendo solo un servizio di Hosting, non avrete accesso diretto alla vostra macchina (che è peraltro condivisa con altri migliaia di utenti) e quindi non sarete in grado di installare autonomamente il certificato. La sola cosa che potete fare è rivolgervi al vostro “Oste” (in italiano mi piace di più) e chiedere di poter aggiungere una certificazione al vostro sito. Saranno poi loro a contattare la Certfication Authority e, fornendo tutti i vostri dati, “acquistare” un certificato da aggiungere al vostro sito.
Guardando in giro ho visto che adesso, tutti i principali fornitori di servizi Hosting, offrono la certificazione del proprio sito per pochi euro al mese/anno, a seconda del contratto che avete fatto (gli americani preferiscono prezzi mensili, noi italiani prediligiamo il prezzo annuo).
Se invece siete un po’ più “ricchi” (quanto meno in dotazione hardware) e quindi disponete di un vostro server personale sul quale ci fate tutto quello che vi garba, avrete, quasi certamente, sottoscritto un servizio di Housing: vi do il mio server, voi me lo alimentate e connettete in rete. Ovviamente se siete ancora più “ricchi” (anche di soldi) è possibile che il vostro server lo abbiate direttamente voi in casa.
Quello che bisogna fare in questi casi è generarsi la coppia di chiavi pubbliche da portare alla Certification Authority perchè faccia il suo lavoro (le certifichi). Verrà quindi generato, dopo le opportune verifiche, un certificato che verrà firmato dall’Authority stessa (che lo aggiungerà anche alla lista dei riconosciuti sui propri server) e vi verrà inviato per poter essere installato sul vostro server.
E’ anche possibile farsi tutto in casa: generare la chiave, generare il certificato ed installarlo. Quello che manca in questo caso è che nessuno potrà dire all’utente che siete una persona fidata. Verrà mostrato un messaggio di warning e sarà l’utente a dover decidere se il sito web è sicuro o no, cosa che è ovviamente innaturale: come può sapere l’utente (un nostro cliente per esempio) se il mio sito web è sicuro?
Se tutti i server dove vengono fatti transazioni monetarie fossero muniti di tale sistema di certificazione (ormai sembra che si siano tutti adeguati, per fortuna) e noi utenti fossimo un po’ più accorti (ahimè non è quasi mai così), sarebbe impossibile subire i raggiri che sono stati sulle prime pagine dei giornali in questi anni. Per esempio la pagina di accesso al sito delle Poste (per citarne uno) che era stata modificata ed ospitata in realtà su un altro server. Se tutto fosse stato fatto a dovere l’utente avrebbe saputo che si stava abbandonando una connessione sicura (lasciatelo quel messaggio per quanto snervante… serve appunto a questo) e soprattutto si sarebbe dovuto chiedere: “perchè mi stanno chiedendo i miei dati di accesso con un normale protocollo HTTP?”.
E’ vero che è impossibile tenere sempre tutto sottocontrollo durante la normale navigazione in rete, cerchiamo però di farlo almeno quando prendiamo in mano la nostra carta di credito o quando accediamo alla nostra banca.
#1lorenzo
consiglio http://www.cacert.org
non è ancora installato di default su firefox ma ci stanno lavorando
#2Salvatore
Wow Marco veramente complimenti, ogni giorno sforni articoli sempre più interessanti O.O
#3Roberto Rubellini
quoto salvatore… complimenti!
#4Tom
Complimenti Marco, finalmente uno che scrive cose originali.
#5Riccardo Messina
Articolo interessante, ma un pò lungo…!
#6fabrizio
I miei più sinceri complimenti… che articolo!
Fabrizio.
#7Marco Mornati
@ Tutti:
Grazie 1000 per i complimenti. Ad onor del vero devo però dire che l’idea dell’articolo è venuta a Shor… io l’ho “solo” scritto! 😛
@ Riccardo Messina:
E’ vero, a volte sono un po’ prolisso 🙂 Dire semplicemente “devi fare così e così, perchè questa è la sola strada” sarebbe conciso, ma lascerebbe un po’ di amaro in bocca. La domanda che frullerebbe a tutti in testa sarebbe: “Ma peccchè?” 🙂
#8Shor
@ Marco Mornati:
Si ma io ti ho solo dato l’input, tu sei riuscito a scrivere perfettamente l’articolo come me lo immaginavo in testa, quindi complimenti anche da parte mia 😉
#9Marco Mornati
@ Shor:
Ah beh… se i complimenti te li fa il “capo”… allora non si può più dire niente! 🙂
#10Wall-e
Bravo, molto utile!
#11sicurezzadigitale
Oltre a CaCert, segnalato dall’utente qui sotto, cito un fornitore di certificati SSL emessi da CA riconosciute dai browser di navigazione (GeoTrust, RapidSSL, VeriSign, Symantec, ecc.): http://www.trustico.it