<?xml version="1.0" encoding="Windows-1252"?><feed version="0.3" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns="http://purl.org/atom/ns#" xml:lang="it-it"><title>Il lato oscuro - Il blog di Alessandro Catorcini</title><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/ale/" /><tagline type="text/html">Il lato oscuro - Il blog di Alessandro Catorcini</tagline><id>http://blogs.aspitalia.com/ale/</id><generator url="http://feed.aspitalia.com/" version="ASPItalia.com">feed.ASPItalia.com 'Weyoh' 4.8.715</generator><author><name>Il lato oscuro - Il blog di Alessandro Catorcini</name><url>http://blogs.aspitalia.com/ale/</url></author><modified>2008-07-24T03:48:01+01:00</modified><entry><title>Smitizzare HTTPS e le infrastrutture a chiave pubblica (PKI)</title><id>http://blogs.aspitalia.com/ale/post2241/Smitizzare-HTTPS-Infrastrutture-Chiave-Pubblica-PKI.aspx</id><created>2008-02-21T11:01:00+01:00</created><content type="text/html" mode="escaped">&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2241' border=&quot;0&quot; style=&quot;width:1px; height:1px;&quot; /&gt;&lt;p&gt;Per un utente finale, https &#232; pericolosamente simile al cugino http.&lt;/p&gt;&lt;p&gt;In realt&#224; molto di pi&#249; accade in modo nascosto e capire meglio la differenza aiuter&#224; molto in situazioni in cui sia richiesto di usare https come trasporto sicuro.&lt;/p&gt;&lt;p&gt;Https o http su SSL nacque negli anni '90 come una prima applicazione di SSL per la tramissione sicura di dati. E' visto come uno degli architravi della nascita dell'e-commerce.&lt;/p&gt;&lt;p&gt;Il principio fondamentale su cui SSL si basa &#232; semplice: un client e un server verificano il proprio &amp;quot;pedigree&amp;quot; e si scambiano una chiave di sessione con la quale criptare il traffico tra loro.&lt;/p&gt;&lt;p&gt;Il &amp;quot;pedigree&amp;quot; in questione &#232; costituito da una serie di messaggi criptati e firmati con una coppia di chiavi pubblica/privata contenuti in un certificato.&lt;/p&gt;&lt;p&gt;Smitizziamo un po' il gergo dell'https e dell'SSL&lt;/p&gt;&lt;p&gt;Una chiave &#232; un dato utilizzato come parametro da un algoritmo di crittazione o decrittazione per cifrare o decifrare un insieme di dati. Una chiave pu&#242; essere parte di una coppia, in cui ci&#242; che &#232; cifrato con una delle chiavi pu&#242; essere solo decifrato dall'altra, o una chiave a s&#233; stante. Nel primo caso, una delle chiavi della coppia pu&#242; essere distribuita liberamente (chiave pubblica) e solo chi possiede l'altra (chiave privata) potr&#224; accedere all'informazione cifrata. Nel secondo caso, la chiave deve essere conosciuta da entrambe le parti della conversazione a priori perch&#233; ci possa essere una conversazione cifrata.&lt;/p&gt;&lt;p&gt;E' da notare come gli algoritmi di crittazione/decrittazione a chiave pubblica (per esempio RSA) siano ordini di grandezza pi&#249; lenti degli algoritmi a singola chiave privata (per esempio AES o Blowfish)&lt;/p&gt;&lt;p&gt;Un certificato &#232; l'unione di un'identit&#224; (per esempio un nome o l'url di un server) e una coppia di chiavi. Un certificato pu&#242; essere firmato usando la chiave di un altro certificato.&lt;/p&gt;&lt;p&gt;Una firma digitale &#232; definita come lo hash di un insieme di dati e il nome del principal di un certificato. Una volta che un insieme di dati ha una firma digitale, modificare i dati in qualunque modo rende lo hash diverso da quello contenuto nella firma e quindi rende evidente che i dati sono stati alterati.&lt;/p&gt;&lt;p&gt;A questo punto &#232; ovvio che se uso la mia chiave privata di una coppia di chiavi contenute in un certificato a mio nome per generare lo hash di una firma digitale, questo ha due effetti:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Chi riceve quei dati pu&#242; verificare la firma con la mia chiave pubblica e certificare che quei dati vengono veramente da me &lt;/li&gt;&lt;li&gt;Chi riceve quei dati pu&#242; verificare che quei dati non sono stati modificati da nessuno e che sono esattamente gli stessi identici dati che sono stati da me inviati. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;a questo punto abbiamo il primo ingrediente per stabilire una connessione sicura.&lt;/p&gt;&lt;p&gt;L'inghippo a questo punto diventa come fare a sapere se la chiave pubblica che ho trovato nel certificato pubblico che mi hai dato &#232; davvero la tua.&lt;/p&gt;&lt;p&gt;Qui entra in gioco il concetto di Public Key Infrastructure (PKI) e di Certification Authority (CA).&lt;/p&gt;&lt;p&gt;Non tutti i certificati sono uguali. Alcuni certificati sono firmati da altri certificati, che sono firmati da altri certificati e cos&#236; via.&lt;/p&gt;&lt;p&gt;Nel mondo esiste un gruppo di certificati speciali. Sono i cosiddetti Trusted Root (la migliore traduzione che mi viene in mente &#232; le &amp;quot;fonti di fiducia&amp;quot;).&lt;/p&gt;&lt;p&gt;Questi certificati sono stati verificati con una procedura rigorosa al di fuori delle normali trasmissioni e i loro possessori si sono impegnati a seguire procedure altrettanto rigorose per emettere e firmare certificati.&lt;/p&gt;&lt;p&gt;La lista di questi trusted root universali si pu&#242; trovare lanciando MMC e inserendo lo snap-in dei certificati. Nell'albero a sinistra c'&#232; un nodo &amp;quot;Trusted Root Certification Authorities&amp;quot;.&lt;/p&gt;&lt;p&gt;Tornando ad un certificato, si chiama catena della fiducia (chain of trust) il fatto che l'atto di firmare un certificato implica certificare il legame tra il nome della risorsa e le chiavi crittografiche. Iterando questo, un certificato che &#232; stato firmato da un root, pu&#242; essere usato per firmare altri certificati, cos&#236; trasferendo la verifica implicita che anche questi certificati di secondo o n-esimo livello sono verificati.&lt;/p&gt;&lt;p&gt;Tornando al nostro problema con SSL e HTTPS, per verificare che un client &#232; davvero chi dice di essere e che il server &#232; davvero chi dice di essere la conversazione che avviene &#232; la seguente:&lt;/p&gt;&lt;p&gt;Client &amp;quot;Ciao Server. Sono Pino della Ragioneria. Questo &#232; il mio certificato.&#176;&#160; (nota - questo &#232; facoltativo e succede solo se il client usa il certificato per autenticarsi. Talvolta questo si fa per avere connessioni ad alta sicurezza, per esempio quando la chiave privata &#232; registrata su una smartcard)&lt;/p&gt;&lt;p&gt;Server: &amp;quot;Ciao Pino della Ragioneria, il tuo certificato &#232; valido e firmato da qualcuno di cui mi fido, quindi sei davvero tu. Questo &#232; il mio di certificato&amp;quot;&lt;/p&gt;&lt;p&gt;Client: &amp;quot;Server, il tuo certificato &#232; firmato dalla chiave di un certificato di cui mi fido. usando la tua chiave pubblica ho criptato una chiave privata che vorrei usare per questa sessione&#176;&lt;/p&gt;&lt;p&gt;Server: &amp;quot;Pino, ho ricevuto la tua chiave di sessione e ti mander&#242; i dati criptati con essa. Mostra il famigerato lucchetto chiuso nel browser.&amp;quot;&lt;/p&gt;&lt;p&gt;&#160;&lt;/p&gt;&lt;p&gt;Capire come funziona questo handshake &#232; la chiave per tutti i problemi che ho trovato nei forum di ASPItalia attorno a configurare https e i certificati.&lt;/p&gt;&lt;p&gt;In particolare, dove le cose possono andare storte &#232; nella fase in cui il client verifica l'identit&#224; del server. Questa fase richiede che il certificato che il server usa per identificarsi si possa ricollegare ad una Trusted Root Certification Authority.&lt;/p&gt;&lt;p&gt;Perch&#233; ci&#242; avvenga &#232; necessaria una delle seguenti condizioni:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;avete comprato un certificato SSL da una Certification Authority riconosciuta &lt;/li&gt;&lt;li&gt;avete reso la vostra CA fidata presso i client che si collegheranno &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Il caso 2 diventa interessante nello scenario in cui si voglia usare https come il trasporto per un web service aziendale che si voglia aprire soltanto a clienti interni. Per fare questo si deve settare IIS con un certificato https generato dalla propria CA e si installa il certificato root della propria CA sui client tra i Trusted Root CA. &lt;/p&gt;&lt;p&gt;Questo ultimo passaggio eviter&#224; che il browser segnali che il certificato usato dal server non &#232; fidato con il famigerato messaggio di warning.&lt;/p&gt;&lt;p&gt;Si pu&#242; andare oltre, e richiedere che i client si identifichino con un certificato rilasciato dalla stessa CA. Questo consente di integrare un'autenticazione a user-password (qualcosa che sai) con un autenticazione a token (qualcosa che hai).&lt;/p&gt;&lt;p&gt;E' da notare che per installare una nuova Trusted Root CA &#232; necessario essere amministratori della macchina client (ovviamente)&lt;/p&gt;&lt;p&gt;&#160;&lt;/p&gt;&lt;p&gt;Questo &#232; il mio primo post ospitato dagli amici di ASPItalia. Grazie a Daniele, Stefano, Ricky, Ricciolo e tutti quelli che mi sto dimenticando in questa lista per la cortese ospitalit&#224;.&lt;/p&gt;&lt;p&gt;&#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href=&quot;http://tags.aspitalia.com/IIS/&quot; rel=&quot;tag&quot;&gt;IIS&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Security/&quot; rel=&quot;tag&quot;&gt;Security&lt;/a&gt;, &lt;a href=&quot;http://tags.aspitalia.com/Windows_Server/&quot; rel=&quot;tag&quot;&gt;Windows Server&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href=&quot;http://www.aspitalia.com/&quot;&gt;(C) 2008 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://blogs.aspitalia.com/ale/post2241/Smitizzare-HTTPS-Infrastrutture-Chiave-Pubblica-PKI.aspx"/><issued>2008-02-21T11:01:00+01:00</issued><modified>2008-02-21T11:01:00+01:00</modified><slash:comments>2</slash:comments><wfw:comments>http://blogs.aspitalia.com/ale/post2241/Smitizzare-HTTPS-Infrastrutture-Chiave-Pubblica-PKI.aspx#feedback</wfw:comments><wfw:commentRss>http://blogs.aspitalia.com/ale/CommentRSS2241.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2241</trackback:ping></entry></feed>