<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Security &amp; Architecture : Specifiche di Base</title><link>http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx</link><description>Tags: Specifiche di Base</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>WS-Discovery enhanced</title><link>http://blogs.msdn.com/mariofontana/archive/2009/10/13/ws-discovery-enhanced.aspx</link><pubDate>Tue, 13 Oct 2009 07:23:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906488</guid><dc:creator>mfontana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9906488.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9906488</wfw:commentRss><description>&lt;p&gt;Continua la saga su WS-Discovery scritta sempre da Alessio Mannelli. Per chi si fosse perso la prima puntata può leggerla &lt;a href="http://blogs.msdn.com/mariofontana/archive/2009/07/23/understanding-ws-discovery.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Recap&lt;/h4&gt;  &lt;p&gt;Ben ritrovati in questa serie di post dedicati alla specifica WS-Discovery. Nella puntata precedente abbiamo fatto conoscenza del modello, dei messaggi e delle interazioni basiche fondamento della specifica.&lt;/p&gt;  &lt;p&gt;Abilitare scenari di composizione dinamica, sia a design-time, ma soprattutto a runtime, sono il fulcro alla base della specifica.&lt;/p&gt;  &lt;p&gt;In questa nuova puntata andremo a conoscere il supporto di rete previsto in WS-Discovey, il &lt;strong&gt;Discovery Proxy&lt;/strong&gt;, come gestire il concetto degli Scopes, ed introdurremmo gli scenari applicativi che implementeremo nella prossima puntata della serie WS-Discovery.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Supporto di rete&lt;/h4&gt;  &lt;p&gt;Abbiamo già visto nella prima puntata le due modalità operative presenti in WS-Discovery, &lt;i&gt;ad-hoc&lt;/i&gt; e &lt;i&gt;managed&lt;/i&gt;. La prima si basa completamente sullo scambio di messaggi in Multicast per tutte le peculiarità di Discovery (&lt;b&gt;Hello/Bye/Probe/Match&lt;/b&gt; e relative *&lt;b&gt;Resolve&lt;/b&gt;), la seconda si basa sulla presenza di un servizio di rete, denominato Discovery Proxy, al quale inviare i messaggi di ricerca (&lt;b&gt;Probe&lt;/b&gt; e &lt;b&gt;Resolve&lt;/b&gt;).&lt;/p&gt;  &lt;p&gt;La specifica identifica le seguenti definizioni per l’invio di messaggi in multicast:&lt;/p&gt;  &lt;p&gt;· DISCOVERY_PORT: port &lt;b&gt;3702&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· IPv4 multicast address: &lt;b&gt;239.255.255.250&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· IPv6 multicast address: &lt;b&gt;FF02::C&lt;/b&gt; (link-local scope) &lt;/p&gt;  &lt;p&gt;I messaggi multicast devono essere inviati utilizzando &lt;a href="http://specs.xmlsoap.org/ws/2004/09/soap-over-udp/soap-over-udp.pdf" target="_blank"&gt;SOAP over UDP&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Quando la modalità operativa utilizzata è quella ad-hoc, tutti i messaggi di richiesta devono essere inviati come sopra definito, mentre tutte le risposte verranno inviate in unicast al client che ha inviato i messaggi. Per comunicare in unicast verso il client vi sono due possibilità:&lt;/p&gt;  &lt;p&gt;· Il client aggiunge un indirizzo di risposta sfruttando l’header di Addressing &lt;em&gt;ReplyTo&lt;/em&gt; .&lt;/p&gt;  &lt;p&gt;· Il server utilizza l’indirizzo IP e la porta sorgente della connessione UDP ricevuta per rispondere al client.&lt;/p&gt;  &lt;p&gt;Nella modalità operativa &lt;i&gt;managed &lt;/i&gt;il client dialoga con il Discovery Proxy in unicast, sia in richiesta che in risposta.&lt;/p&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;Client e Discovery Proxy&lt;/h4&gt;  &lt;p&gt;Il Discovery Proxy, come già descritto, è alla base della modalità operativa cosiddetta &lt;i&gt;managed.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Un client, se non diversamente istruito, si trova normalmente in un stato nel quale non conosce Discovery Proxy; è possibile, chiaramente che riceva un Hello dal Discovery Proxy, riconoscibile da uno specifico &lt;em&gt;Service Type &lt;/em&gt;che lo contraddistingue (&lt;i&gt;d:DiscoveryProxy&lt;/i&gt;) nel qual caso modificherà radicalmente il modo con il quale invia richieste di &lt;em&gt;Probe &lt;/em&gt;e &lt;em&gt;Resolve&lt;/em&gt;, secondo il diagramma a stati sotto descritto:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_thumb.png" width="417" height="465" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Quindi, una volta che il client si trova a conoscere un Discovery Proxy comunicherà con lo stesso in modalità unicast, evitando quindi di congestionare la rete con messaggi in multicast.&lt;/p&gt;  &lt;p&gt;Un DiscoveryProxy, di contro, quando riceve un messaggio di &lt;em&gt;Probe &lt;/em&gt;o &lt;em&gt;Resolve &lt;/em&gt;in multicast è tenuto a spedire subito un messaggio di &lt;b&gt;Hello&lt;/b&gt; (in multicast a sua volta): questo particolare messaggio modifica lo stato dei client in modo tale che utilizzino solamente i Discovery Proxy di cui si fidano, ed ingnorino di contro i messaggi in multicast dei Target Service.&lt;/p&gt;  &lt;p&gt;A questo punto sia i Client che i Target Service indirizzeranno le loro comunicazioni (di ricerca, per il client, di connessione/disconnessione dalla rete, per i servizi) al Discovery Proxy. Eventualmente i messaggi di connessione/disconnessione (&lt;b&gt;Hello/Bye&lt;/b&gt;) potranno essere inviati ancora in multicast, da parte dei Target Service: il loro peso specifico è talmente basso, cosi come il numero di messaggi inviati, da essere praticamente trascurabili in uno scenario reale.&lt;/p&gt;  &lt;p&gt;Tra i vantaggi di avere un’infrastruttura di Discovery &lt;i&gt;managed &lt;/i&gt;vi è anche la possibilità di scavalcare il limite di utilizzo delle comunicazioni multicast (overhead di gestione del routing del protocollo fra tutti): inserire alcuni Discovery Proxy tra le varie sottoreti, e sfruttare il modello di discovery, può portare ad allargare gli orizzonti del proprio ambiente operativo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_thumb_1.png" width="408" height="245" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In questo modo i client possono trovare ed utilizzare servizi non presenti nelle loro sottoreti, senza rendere difficoltosa la gestione dell’infrastruttura.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Scopes&lt;/h4&gt;  &lt;p&gt;Come già accennato, gli &lt;em&gt;scopes, &lt;/em&gt;di seguito indicati anche come “ambiti”, possono caratterizzare un servizio nel mondo di WS-Discovery. La specifica identifica solamente i metodi specifici con i quali un Target Service deve confrontare i suoi ambiti, con quelli richiesti dal messaggio di Probe ricevuto, per rispondere, eventualmente, con un messaggio di Match (&lt;b&gt;Probe&lt;/b&gt; o &lt;b&gt;Request&lt;/b&gt;). Ripetiamo la lista dei modelli di confronto utilizzabili, per riferimento:&lt;/p&gt;  &lt;p&gt;· http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/rfc3986&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/uuid"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/uuid&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/ldap"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/ldap&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/strcmp0"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/strcmp0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/none"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/none&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Per maggiori informazioni sugli stessi il capitolo 5 della specifica entra nei dettagli di ogni modello.&lt;/p&gt;  &lt;h4&gt;Scenari applicativi di utilizzo di WS-Discovery &lt;/h4&gt;  &lt;p&gt;Fino a qui abbiamo praticamente visto tutti gli aspetti peculiari della specifica WS-Discovery, cerchiamo adesso di focalizzare l’utilizzo della stessa nel mondo reale, proponendo alcuni scenari che normalmente si propongono in un ambiente orientato ai servizi, e che elaboreremo nella prossima puntata:&lt;/p&gt;  &lt;p&gt;1. Ricerca a runtime di un servizio che implementa l’interfaccia che ci interessa.&lt;/p&gt;  &lt;p&gt;2. Ricerca a runtime di un servizio che, oltre ad implementare l’interfaccia richiesta, è configurato con uno scope specifico.&lt;/p&gt;  &lt;p&gt;Il primo scenario è il più frequente in ambito composizione : configurazione degli indirizzi fisici utilizzati dai servizi nei diversi “ambienti operativi” nei quali l’ applicazione verrà eseguita (sviluppo, pre-produzione, produzione e chi più ne ha più ne metta). Il vantaggio che deriva dall’utilizzo di WS-Discovery come asset fondamentale di tutti i servizi e le applicazioni è evidente: ad ogni modifica di “ambiente operativo” l’applicazione ricercherà il servizio specifico ed utilizzerà l’indirizzo recuperato a runtime per il colloquio.&lt;/p&gt;  &lt;p&gt;Chiaramente vi possono essere degli accorgimenti capaci di evitare il “dispendio” di messaggi che la ricerca di un’istanza di servizio può aggiungere all’economia del colloquio applicazione – servizio. Talvolta il peso è trascurabile, quando ad esempio il client ha un ciclo di vita molto elevato, tale per cui il peso aggiunto diventa infinitesimale rispetto al resto del peso di comunicazione; altre volte invece è necessario salvare l’indirizzo del servizio recuperato tramite utilizzo di WS-Discovery per poi riutilizzarlo al riavvio dell’applicazione. In questo modo vi è la possibilità che il servizio recuperato in precedenza non sia più “vivo”, nel qual caso si potrà procedere con una nuova interazione Probe – ProbeMatch.&lt;/p&gt;  &lt;p&gt;Il secondo scenario è il più “ambizioso” in determinati contesti. Ipotizziamo di avere alcune istanze di uno specifico servizio, distribuite in modo tale da coprire più segmenti della topologia di rete in esame. Per esempio potremmo avere un servizio locale su una macchina, un servizio su una LAN particolare , ed un servizio al centro. Tutti e tre i servizi implementano la stessa interfaccia e gestiscono gli stessi dati ma, data la loro differente collocazione geografica hanno uno SLA (service level agreement) diverso a seconda dei dati che vengono richiesti.&lt;/p&gt;  &lt;p&gt;Facciamo un esempio : il servizio locale alla mia macchina avrà lo stato completo dei dati che si generano dalla macchina stessa, il servizio interno alla LAN ha lo stato completo dei dati che si generano all’interno della LAN stessa, e per finire il servizio al centro ha lo stato completo dei dati che si generano fuori dal contesto applicativo specifico. Ogni “livello” diverso si sincronizza e coordina con gli altri tramite un ulteriore flusso dati (che non analizziamo) che rende possibile, con tempi diversi, l’allineamento dei dati su tutte le istanze del servizio ipotizzato.&lt;/p&gt;  &lt;p&gt;A questo punto l’applicazione deve capire se e come le tre diverse istanze di servizio possono aiutarlo nell’esecuzione delle sue funzioni. In alcuni casi un servizio fisicamente “vicino” al client può essere un aiuto, se non altro per il ridotto round trip di rete dell’invocazione. Altrimenti, se l’applicazione capisce di avere necessità di dati con specifico SLA può ricercare uno dei servizi specifici. &lt;/p&gt;  &lt;p&gt;Bene, l’utilizzo degli &lt;i&gt;scopes, &lt;/i&gt;in questo caso, è l’ausilio tecnico alla problematica. Ogni diversa istanza di servizio viene configurata in diversi ambiti (scopes, per l’appunto). In contesti gerarchici, come l’esempio illustrato, gli scopes possono essere definiti con una convenzione come la seguente:&lt;/p&gt;  &lt;p&gt;· Servizio al centro rende disponibile lo scope &lt;b&gt;&lt;i&gt;http://ROOT&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· Servizio di “filiale” rende disponibile lo scope &lt;b&gt;&lt;i&gt;http://ROOT/BRANCH&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· Servizio locale rende disponibile lo scope &lt;b&gt;&lt;i&gt;http://ROOT/BRANCH/MACHINE&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In questo scenario si possono poi utilizzare diverse tipologie di confronto tra gli scopes: la tipologia di esatta comparazione delle stringhe, ad esempio, restituirà solo uno delle tre istanze di servizio, piuttosto che la versione RFC3986, la quale restituisce una istanza se almeno uno dei sotto livelli della risorsa richiesta è confrontabile con quello richiesto; in questo caso se chiedo lo scope ROOT, tutti e tre i servizi dell’esempio risponderanno con i loro dettagli. &lt;/p&gt;  &lt;p&gt;Tutto dipende da quali sono le necessità applicative, ma le prospettive offerte dall’infrastruttura sono molto interessanti, e flessibili.&lt;/p&gt;  &lt;h4&gt;Conclusioni &lt;/h4&gt;  &lt;p&gt;Con questo secondo post abbiamo esaurito l’overview della specifica, e definito alcuni scenari che reputo interessanti e che saranno la base del terzo ed ultimo post della serie WS-DISCOVERY. Analizzeremo l’implementazione di WS-Discovery inserito nella nuova versione del &lt;strong&gt;.Net Framework 4.0&lt;/strong&gt;, attualmente in versione Beta, e realizzeremo gli scenari proposti. Per avvantaggiarvi vi consiglio di leggere e sottoscrivere &lt;a href="http://blogs.msdn.com/discovery/"&gt;http://blogs.msdn.com/discovery/&lt;/a&gt;, ne avremo bisogno!&lt;/p&gt;  &lt;p&gt;A presto, &lt;/p&gt;  &lt;p&gt;Alessio&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906488" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Understanding WS-Discovery</title><link>http://blogs.msdn.com/mariofontana/archive/2009/07/23/understanding-ws-discovery.aspx</link><pubDate>Thu, 23 Jul 2009 20:04:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9846596</guid><dc:creator>mfontana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9846596.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9846596</wfw:commentRss><description>&lt;p&gt;Da oggi e per i prossimi mesi ogni tanto ospiterò dei post scritti da alcuni colleghi/amici di Microsoft affinchè possano raccontare un po’ della loro expertise e competenza tecnica ottenuta durante le tante attività di consulenza e di supporto sul campo. Ovviamente il tema sarà sempre inerente le architetture applicative e la sicurezza…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_thumb.png" width="68" height="70" /&gt;&lt;/a&gt;In questo post iniziamo con &lt;strong&gt;Alessio Mannelli &lt;/strong&gt;(nella foto, l’unica decente che ho trovato :-)!&amp;#160; &lt;br /&gt;Non è la prima volta che parla su questo “canale”… vi ricordate &lt;strong&gt;quell’Alessio Mannelli &lt;/strong&gt;con il quale quasi un anno fa facemmo un video &lt;a href="http://blogs.msdn.com/mariofontana/archive/2008/09/29/come-funzionano-i-security-token-services.aspx" target="_blank"&gt;dove spiegava il funzionamento dei Security Token Services&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;?? Ebbene si, è sempre lui :-) Alessio lavora nella divisione servizi in Microsoft Italia come Senior Developer ed oramai ha un pluriennale esperienza di &lt;strong&gt;&lt;u&gt;implementazioni&lt;/u&gt;&lt;/strong&gt; di soluzioni SOA nell’enterprise. &lt;/p&gt;  &lt;p&gt;Quindi, non mi dilungo ulteriormente in ciancie e passo la palla ad Alessio per la prima puntata sulla specifica &lt;em&gt;WS-Discovery&lt;/em&gt; che tra l’altro è appena &lt;a href="http://blogs.msdn.com/mariofontana/archive/2009/07/20/net-4-0-beta-1-e-ws-discovery.aspx" target="_blank"&gt;stata rettificata come standard OASIS&lt;/a&gt; ed è presente nel &lt;strong&gt;framework .NET 4.0&lt;/strong&gt;…&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;La Missione&lt;/h4&gt;  &lt;p&gt;Tra le tante specifiche che regolano il variegato mondo dei Web Services &lt;strong&gt;WS-Discovery&lt;/strong&gt; è sicuramente una delle più ambiziose: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;definire un modello standard per la localizzazione di “servizi”, un modello per essere informati quando un nuovo “servizio” viene fatto partire e quando un “servizio” viene spento. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Un modello quindi per effettuare ricerche di “servizi” e recuperarne caratteristiche specifiche come gli endpoint con i quali è possibile dialogare con gli stessi, i protocolli utilizzabili, e molto altro ancora.&lt;/p&gt;  &lt;p&gt;Il modello di Discovery è, o sta diventando, necessario in un mondo dove la “composabilità” delle applicazioni diventa asset fondamentale dell’ecosistema applicativo di una azienda; applicazioni dinamiche per loro natura che, semplicemente, è impossibile connettere a design-time oppure a deployment-time; c’è sicuramente necessità di un modello di “connessione” dinamica a runtime, un modello che valorizzi tutti gli asset di una azienda. &lt;/p&gt;  &lt;p&gt;WS-Discovery è anche un facilitatore di scenari dove trovare ed utilizzare servizi all’interno o all’esterno dell’azienda diventa sempre più difficile; strutture verticali aziendali non allineate, poca (talvolta nessuna) Governance dei programmi e progetti in corso, molti fornitori, sono tra le problematiche più classiche che portano alla proliferazione e conseguente non riutilizzo di Web Service.&lt;/p&gt;  &lt;p&gt;Per ultimo Discovery si pone l’obiettivo di abbracciare sempre più “elementi” non tradizionali di un modello di software a servizi: stampanti, device RFID, macchine fotografiche digitali, proiettori. &lt;/p&gt;  &lt;p&gt;La possibilità di utilizzare un sistema leggero, dinamico, interoperabile per la costruzione di applicazioni composte e distribuite è fondamento della specifica WS-Discovery.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Un servizio “Discoverabile”&lt;/h4&gt;  &lt;p&gt;Per la specifica &lt;a href="http://docs.oasis-open.org/ws-dd/discovery/1.1/cs-01/wsdd-discovery-1.1-spec-cs-01.pdf" target="_blank"&gt;WS-Discovery&lt;/a&gt; ogni servizio viene identificato sulla base di quattro caratteristiche fondamentali:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- EndpointReference&lt;/b&gt; (definito in &lt;strong&gt;WS-Addressing&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Un indirizzo che identifichi univocamente il servizio specifico. L’indirizzo non deve essere per forza un indirizzo fisico, anzi la specifica consiglia l’utilizzo di indirizzi logici (eg. Un identificatore universale univoco, GUID, UUID)&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Types&lt;/b&gt; (definito in &lt;strong&gt;WS-Discovery&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Ogni servizio web implementa uno o più tipologie di &lt;em&gt;portType&lt;/em&gt;, cosi come definito dalla specifica di &lt;a href="http://www.w3.org/TR/2001/NOTE-wsdl-20010315" target="_blank"&gt;WSDL 1.1&lt;/a&gt;: la nomenclatura utilizzata è di tipo &lt;em&gt;Namespace:ServiceTypeName&lt;/em&gt; e quasi sempre viene inferita dalle specificità dei contratti implementati nei servizi.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Scopes&lt;/b&gt; (definito in &lt;strong&gt;WS-Discovery&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Ogni servizio può identificare uno o più ambiti o contesti nei quali esiste o per i quali è stato configurato.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- XAddrs&lt;/b&gt; (definito in &lt;strong&gt;WS-Discovery&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Tutti gli indirizzi sui quali il servizio specifico è raggiungibile ed invocabile. Abbiamo quindi un modello per definire completamente uno specifico Servizio:&lt;/p&gt;  &lt;p&gt;EndpointReference, l’identificatore univoco&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Types, le tipologie di “contratti” che il servizio implementa &lt;/li&gt;    &lt;li&gt;Scopes, i contesti applicativi del servizio &lt;/li&gt;    &lt;li&gt;XAddrs, gli indirizzi sui quali il servizio è raggiungibile ed invocabile. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;a:EndpointReference&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;a:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; uuid:98190dc2-0890-4ef8-ac9a-5940995e6119&amp;#160; &lt;br /&gt;&amp;#160; &amp;lt;/a:Address&amp;gt;       &lt;br /&gt;&amp;lt;/a:EndpointReference&amp;gt;       &lt;br /&gt;&amp;lt;d:Types&amp;gt;i:PrintBasic i:PrintAdvanced&amp;lt;/d:Types&amp;gt;       &lt;br /&gt;&amp;lt;d:Scopes&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &lt;/em&gt;&lt;a href="ldap:///ou=engineering,o=examplecom,c=us"&gt;&lt;em&gt;ldap:///ou=engineering,o=examplecom,c=us&lt;/em&gt;&lt;/a&gt;&lt;em&gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/em&gt;&lt;a href="ldap:///ou=floor1,ou=b42,ou=anytown,o=examplecom,c=us"&gt;&lt;em&gt;ldap:///ou=floor1,ou=b42,ou=anytown,o=examplecom,c=us&lt;/em&gt;&lt;/a&gt;&lt;em&gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/em&gt;&lt;a href="http://itdept/imaging/deployment/2004-12-04"&gt;&lt;em&gt;http://itdept/imaging/deployment/2004-12-04&lt;/em&gt;&lt;/a&gt;&lt;em&gt;      &lt;br /&gt;&amp;lt;/d:Scopes&amp;gt;       &lt;br /&gt;&amp;lt;d:XAddrs&amp;gt;http://prn-example/PRN42/b42-1668-a&amp;lt;/d:XAddrs&amp;gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;Il modello di Discovery&lt;/h4&gt;  &lt;p&gt;La specifica WS-Discovery definisce sei messaggi specifici:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Hello/Bye&lt;/b&gt; – messaggi utilizzati da un servizio per annunciare la sua presenza (Hello) o la sua “dipartita” (Bye).&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Probe/ProbeMatch&lt;/b&gt; – &lt;em&gt;Probe&lt;/em&gt; viene utilizzato per cercare uno specifico tipo di servizio, &lt;em&gt;ProbeMatch&lt;/em&gt; viene utilizzato in risposta alla richiesta.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Resolve/ResolveMatch&lt;/b&gt; – &lt;em&gt;Resolve&lt;/em&gt; viene utilizzato per cercare una specifica istanza di servizio, &lt;em&gt;ResolveMatch&lt;/em&gt; viene utilizzata in risposta alla richiesta.&lt;/p&gt;  &lt;h5&gt;&lt;/h5&gt;  &lt;p&gt;Lo scenario di base prevede che i servizi annuncino la loro operatività e quando possibile il loro “scollegamento” dalla rete.(chiaramente nei casi in cui un servizio si spenga per casi eccezionali, difficilmente può inviare un messaggio di &lt;b&gt;Bye&lt;/b&gt;, e la specifica non è giustamente prescrittiva in questo senso…)&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_thumb_1.png" width="439" height="258" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figura 1 : Hello e Bye Messages&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In &lt;strong&gt;figura 1&lt;/strong&gt;, viene rappresentato lo scenario di base dove l’ipotetico Client riceve i messaggi di &lt;b&gt;Hello&lt;/b&gt; dai servizi WS1 e WS2 cosi come riceve il messaggio di &lt;b&gt;Bye&lt;/b&gt; dal servizio WS3, il quale nel frattempo si è scollegato dalla rete. Il Client potrà quindi utilizzare le informazioni presenti nei messaggi di protocollo per selezionare il servizio da contattare, qual’ora, chiaramente, implementi le tipologie di servizio richieste.&lt;/p&gt;  &lt;p&gt;Quando invece un Client si connette ad una rete, ed è interessato ad uno specifico servizio, può utilizzare i messaggi di protocollo &lt;b&gt;Probe&lt;/b&gt; e/o &lt;b&gt;Resolve&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_thumb_2.png" width="443" height="293" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figura 2 : Probe/Resolve e ProbeMatch/ResolveMath Messages&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In &lt;strong&gt;figura &lt;/strong&gt;2 invece il Client ricerca uno specifico servizio e solo due dei tre servizi presenti e connessi alla rete rispondo con un messaggio di &lt;em&gt;Match&lt;/em&gt;. E’ da notare che, nello scenario definito, la richiesta di &lt;em&gt;&lt;b&gt;Resolve&lt;/b&gt; &lt;/em&gt;difficilmente verrà inviata: ricordiamoci infatti che &lt;em&gt;&lt;b&gt;Resolve&lt;/b&gt; &lt;/em&gt;serve per richiedere i dati di una specifica istanza di servizio, a differenza di &lt;em&gt;&lt;b&gt;Probe&lt;/b&gt; &lt;/em&gt;che ricerca istanze generiche che implementino specifiche tipologie di servizio. In questo caso il messaggio di &lt;em&gt;&lt;b&gt;Resolve&lt;/b&gt; &lt;/em&gt;potrebbe essere utilizzato nel caso in cui, dopo aver ricevuto un &lt;b&gt;&lt;em&gt;ProbeMatch&lt;/em&gt;&lt;/b&gt; alcune informazioni specifiche (tipo gli indirizzi per il dialogo) non fossero presenti.&lt;/p&gt;  &lt;h4&gt;Le modalità operative&lt;/h4&gt;  &lt;p&gt;Le modalità operative definite dalla specifica sono la &lt;strong&gt;&lt;em&gt;“ad-hoc”&lt;/em&gt;&lt;/strong&gt; e la modalità &lt;strong&gt;“managed”&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;La modalità &lt;em&gt;“ad-hoc”&lt;/em&gt; non utilizza nessun servizio di rete né server; i messaggi di &lt;em&gt;&lt;b&gt;Hello/Bye/Probe/Resolve&lt;/b&gt; &lt;/em&gt;vengono inviati in &lt;strong&gt;multicast &lt;/strong&gt;(le relative risposte, dove necessarie, vengono inviate in modalità &lt;strong&gt;unicast &lt;/strong&gt;al client che ha effettuato la richiesta).&lt;/p&gt;  &lt;p&gt;La modalità &lt;strong&gt;&lt;em&gt;“managed” &lt;/em&gt;&lt;/strong&gt;è supportata da un servizio di rete, denominato &lt;strong&gt;Discovery Proxy&lt;/strong&gt;, che funge da accentratore dei servizi presenti nell’ambiente, e che opera per conto loro nel rispondere alle richieste. Riprenderemo il concetto di Discovery Proxy in un prossimo post, poiché merita sicuramente un approfondimento.&lt;/p&gt;  &lt;h4&gt;Conclusioni&lt;/h4&gt;  &lt;p&gt;In questo primo post abbiamo solamente scalfito la superficie della specifica WS-Discovery: vi sono tutta una serie di concetti e di peculiarità proprie della specifica che verranno riprese nella prossima puntata.&lt;/p&gt;  &lt;p&gt;Saluti,&lt;/p&gt;  &lt;p&gt;Alessio Mannelli&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9846596" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Microsoft, Apache… un ossimoro??</title><link>http://blogs.msdn.com/mariofontana/archive/2009/06/07/microsoft-apache-un-ossimoro.aspx</link><pubDate>Sun, 07 Jun 2009 11:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9702640</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9702640.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9702640</wfw:commentRss><description>&lt;p&gt;Innanzitutto prima di generare uno sciopone a qualcuno vi prego di notare la punteggiatura nel titolo di questo post !!! Microsoft &lt;strong&gt;VIRGOLA &lt;/strong&gt;Apache e non &lt;strong&gt;Microsoft Apache &lt;/strong&gt;:-) Nessuna paura quindi , non abbiamo acquistato Apache !!!! Però c’è da dire che questa notizia, come architetto, mi ha reso proprio contento. Alzi la mano (tanto vi vedo) chi di voi si è trovato almeno una volta nella situazione di far parlare del codice .NET con quello JAVA e/o PHP o viceversa? E tenga su la mano chi ha incontrato qualche “piccolissima” difficoltà nella configurazione e settaggi vari nei rispettivi ambienti !!!! Nessuno ?? ok allora questo post non fa per voi :-)&lt;/p&gt;  &lt;p&gt;Diciamo che c’è stato un evento epocale…&lt;strong&gt; Microsoft partecipa alla keynote della conferenza JavaOne!! &lt;/strong&gt;Infatti durante la conferenza JavaOne &lt;strong&gt;Steven Martin&lt;/strong&gt; - Senior Director, Developer Platform Product Management – e &lt;strong&gt;Aisling MacRunnels &lt;/strong&gt;- Sun Vice President- hanno annunciato durante la keynote che &lt;strong&gt;Sun &lt;/strong&gt;parteciperà attivamente al progetto open-source &lt;strong&gt;Stonehenge &lt;/strong&gt;inizialmente creato da &lt;strong&gt;Microsoft&lt;/strong&gt;, &lt;strong&gt;WS02&lt;/strong&gt;, &lt;strong&gt;University of Moratuwa&lt;/strong&gt;, &lt;strong&gt;Progress Software&lt;/strong&gt;, &lt;strong&gt;Red Hat &lt;/strong&gt;e &lt;strong&gt;Eviware&lt;/strong&gt;. In particolare Sun si occuperà della realizzazione Java/Metro della soluzione &lt;a href="http://www.interoperabilitybridges.com/Project.aspx/Stonehenge_-_StockTrader_community_project" target="_blank"&gt;StockTrader&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Microsoft (anche se molti non lo sanno) ha partecipato e sta partecipando a &lt;a href="http://port25.technet.com/archive/2008/11/07/open-source-interoperability-projects-at-microsoft.aspx" target="_blank"&gt;molti progetti open source&lt;/a&gt; ma questa è la prima volta che Microsoft partecipa come &lt;strong&gt;code contributor &lt;/strong&gt;in un progetto Apache!!&lt;/p&gt;  &lt;p&gt;Lo scopo di questo progetto è nobile : realizzare &lt;strong&gt;&lt;u&gt;in concreto &lt;/u&gt;&lt;/strong&gt;degli scenari di interoperabilità e di best practices tra applicazioni e web services sviluppati su stack tecnologici diveri. &lt;a href="http://blogs.msdn.com/mariofontana/archive/2009/05/20/microsoft-e-saml-2-0-protocol.aspx" target="_blank"&gt;Come dissi in questo mio post&lt;/a&gt;&amp;#160; &lt;em&gt;“non basta avere delle specifiche standardizzate per realizzare veramente degli scenari di interoperabilità” (sintetizzato)&lt;/em&gt; !!! I motivi sono molteplici : non tutti i vendor implementano le medesime specifiche anche se standardizzate, non sempre è chiaro come configurare i vari ambienti e prodotti, spesso ci sono delle piccole differenze in termini di serializzazione, encoding che se non gestite possono rendere difficile la realizzazione del progetto… &lt;/p&gt;  &lt;p&gt;Per questo motivo il progetto Stonehenge &lt;strong&gt;&lt;u&gt;realizza &lt;/u&gt;&lt;/strong&gt;delle applicazioni di esempio basate su stack &lt;strong&gt;Java&lt;/strong&gt;, &lt;strong&gt;.NET, &lt;/strong&gt;&amp;#160;&lt;strong&gt;PHP ma anche Python e Ruby&amp;#160; &lt;/strong&gt;in grado di interoperare utilizzando un set comune di specifiche standard definte dal &lt;strong&gt;W3C &lt;/strong&gt;e &lt;strong&gt;OASIS&lt;/strong&gt;. Stiamo parlando in prevalenza di comunicazioni basate sugli standard WS-*. I vari sorgenti li potete trovare &lt;a href="https://svn.apache.org/repos/asf/incubator/stonehenge/contrib/stocktrader/" target="_blank"&gt;nel repository di stocktrader&lt;/a&gt; : &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/e9279e09cf76_8B2A/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/e9279e09cf76_8B2A/image_thumb.png" width="361" height="287" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9702640" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Interoperabilit_E000_/default.aspx">Interoperabilità</category></item><item><title>Ci vediamo a ROMA??</title><link>http://blogs.msdn.com/mariofontana/archive/2009/02/06/ci-vediamo-a-roma.aspx</link><pubDate>Fri, 06 Feb 2009 20:41:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9402602</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9402602.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9402602</wfw:commentRss><description>&lt;p&gt;Il 16-17-18 Marzo a ROMA si tiene la prima edizione della &lt;a href="http://www.bastaitalia.it/conferenza/" target="_blank"&gt;conferenza BASTA! Italia&lt;/a&gt;. La più prestigiosa conferenza sullo sviluppo .NET tedesca sbarca in Italia !!&lt;/p&gt;  &lt;p&gt;Il 17 mattina terrò una sessione dal titolo : &lt;em&gt;Make your old applications SOA-aware with Web Services API. From Windows XP/2003 to Windows 7/2008 R2.&lt;/em&gt;dove parlerò della nuova architettura per i Web Services presenti nelle prossime versioni del sistema operativo Windows 7 e Windows Server 2008 R2. Sarà una sessione di livelllo 400 (Expert) per dare un po’ di internals e capire come queste API unmanged possono essere utilizzate in architetture SOA e in particolare con servizi WCF/Asmx . Per dare un po’ di background sull’argomento nei prossimi giorni pubblicherò una serie di link introduttivi. Farò comunque i primi 10 min della presentazione una overview di massima.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;L’abstract:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Con Windows 7 e Windows Server 2008 R2 il sistema operativo si arricchisce di nuove API native (WWSAPI – Windows Web Services API) che permettono di estendere le applicazioni unmanaged verso le architetture a servizi.Analizzeremo le ragioni di queste nuove API, l’architettura, le possibilità di interoperabilità con il mondo .NET e Java, e i principali standard WS-* di riferimento implementati.Tramite varie demo scorreremo i principali scenari di utilizzo evidenziandone i pro e i contro.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9402602" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WInternals/default.aspx">WInternals</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Win7/default.aspx">Win7</category></item><item><title>Come funzionano i Security Token Services.</title><link>http://blogs.msdn.com/mariofontana/archive/2008/09/29/come-funzionano-i-security-token-services.aspx</link><pubDate>Mon, 29 Sep 2008 09:10:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8968487</guid><dc:creator>mfontana</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/8968487.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=8968487</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://video.msn.com/video.aspx?vid=c6abdfaa-2606-4f09-bdb4-7aac0afdf1aa"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="256" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/4fdbf840291c_7231/image_5.png" width="394" align="left" border="0" /&gt;&lt;/a&gt; Oggi per la serie &lt;strong&gt;MSDN Talks&lt;/strong&gt; siamo in compagnia di &lt;strong&gt;Alessio Mannelli&lt;/strong&gt; - Senior Developer - della divisione Servizi di Microsoft Italia. Con Alessio negli anni passati abbiamo speso insieme parecchio tempo nella definizione e realizzazione di infrastrutture applicative (a partire da WSE 2.0) fino ad arrivare ai giorni pi&amp;#249; recenti con WCF (&lt;em&gt;WIndows Communicatino Foundation&lt;/em&gt;). &lt;a href="http://video.msn.com/video.aspx?vid=c6abdfaa-2606-4f09-bdb4-7aac0afdf1aa" target="_blank"&gt;In questo breve video&lt;/a&gt; Alessio ci parler&amp;#224; dei meccanismi di autenticazione tra servizi nei modelli definiti da WS-Security, WS-Trust e SAML 1.1. Particolare attenzione viene posta al concetto di Authority (detto anche STS - Security Token Service). Questa breve introduzione teorica sull'argoment&amp;#232; essenziale per capire scenari pi&amp;#249; complessi di Single-Sign-On in architetture SOA. Inoltre, i meccasismi spiegati da Alessio sono i medesimi che troviamo in tecnologie come ADFS (Active Directory Federation Services), CardSpace, nel nuovo &lt;em&gt;Zermatt &lt;/em&gt;(di cui parleremo a breve) e nelle future tecnologie che verranno presentati tra poco al PDC.&lt;/p&gt;  &lt;p&gt;L&amp;#8217;authority gestisce il riconoscimento dei chiamanti e la profilazione degli utenti sui servizi offrendo al sistema un punto centrale per la gestione delle politiche di sicurezza. Il chiamante prima di poter effettuare una richiesta al servizio deve autenticarsi presso l&amp;#8217;authority e farsi rilasciare un ticket di accesso al servizio richiesto. &lt;/p&gt;  &lt;p&gt;L&amp;#8217;autenticazione presso l&amp;#8217;authority avviene mediante l&amp;#8217;invio dell'identit&amp;#224; del servizio client che pu&amp;#242; essere espressa sotto varie forme: credenziali di rete, credenziali custom, certificati X509 oppure &lt;i&gt;Ticket Granting Ticket&lt;/i&gt; (TGT) preventivamente rilasciati dalla stessa authority.&lt;/p&gt;  &lt;p&gt;Alessio, ci parler&amp;#224; prevalentemente del modello di autenticazione di un servizio tramite certificati X509. L&amp;#8217;utilizzo di certificati X509 consente di realizzare un&amp;#8217;infrastruttura di sicurezza basata su algoritmi asimmetrici che utilizzano chiavi pubbliche e private per firmare e criptare le comunicazioni verso l&amp;#8217;authority.&lt;/p&gt;  &lt;p&gt;Lo scenario basato sull&amp;#8217;utilizzo di certificati X509 richiede la presenza di una Certification Authority (interna o esterna all'azienda) riconosciuta da tutte le entit&amp;#224; dell&amp;#8217;infrastruttura che rilascia certificati X509 per l&amp;#8217;identificazione dei vari attori e per l&amp;#8217;utilizzo degli algoritmi di crittografia e firma. Ad ogni componente (chiamante, servizio e authority) &amp;#232; associato uno specifico certificato. La specifica WS-Trust definisce come i servizi in gioco possano autenticarsi tra loro. Riassumento lo scenario descritto da Alessio avremo : &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/4fdbf840291c_7231/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="200" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/4fdbf840291c_7231/image_thumb_1.png" width="398" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;1) il servizio/applicazione chiamante si autentica all'authority via X509. In questo contesto la specifica WS-TRust definisce un tipo di messaggio chiamato RST (Request Security Token). &lt;/p&gt;  &lt;p&gt;2) l'authority autentica il servizio/applicazione client, verifica le policy autorizzative e crea un nuovo security token di tipo SAML che descrive l'identity del client ed eventuali informazioni aggiuntive sui ruoli e applicative.In questo contesto la specifica WS-TRust definisce un tipo di messaggio chiamato RSTR (Request Security Token &lt;strong&gt;Response&lt;/strong&gt;). &lt;/p&gt;  &lt;p&gt;3) Il chiamante passa il security token di tipo SAML al servizio target che pu&amp;#242; effettuare la verifica dell' identit&amp;#224; del client e procedere all'esecuzione del processo di business.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Buona visione&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8968487" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Webcast/default.aspx">Webcast</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/IDentity+Metasystem/default.aspx">IDentity Metasystem</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/MSDN+Talks/default.aspx">MSDN Talks</category></item><item><title>Cosa intendiamo per Infrastruttura Applicativa</title><link>http://blogs.msdn.com/mariofontana/archive/2008/04/22/cosa-intendiamo-per-infrastruttura-applicativa.aspx</link><pubDate>Tue, 22 Apr 2008 10:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8414442</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/8414442.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=8414442</wfw:commentRss><description>&lt;P&gt;L’ Infrastruttura applicativa può essere vista come l’estensione dell’infrastruttura sistemistica capace di offrire servizi ad un insieme controllato di applicazioni. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=355 alt=image src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_thumb.png" width=550 border=0 mce_src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Questa infrastruttura è un insieme di componenti e servizi che consentono alle applicazioni di comunicare con altrettanti servizi (sia locali che remoti). &lt;BR&gt;L’ Infrastruttura applicativa si occupa qindi di fornire delle funzionalità di base ed avanzate che siano trasversali alle applicazioni oltre ad un insieme di regole sulla modalità di comunicazione che deve essere utilizzata da e per ciascun servizio, rendendo questi dettagli trasparenti alle applicazioni:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=387 alt=image src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_thumb_1.png" width=555 border=0 mce_src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/CosaintendiamoperInfrastrutturaApplicati_BF0E/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;I servizi di base sono ad esempio &lt;STRONG&gt;Autenticazione&lt;/STRONG&gt;, &lt;STRONG&gt;Autorizzazione&lt;/STRONG&gt;, &lt;STRONG&gt;Identity Flow&lt;/STRONG&gt;, &lt;STRONG&gt;Logging&lt;/STRONG&gt;, &lt;STRONG&gt;Instrumentation&lt;/STRONG&gt;, &lt;STRONG&gt;Discovery&lt;/STRONG&gt;, ecc.. mentre i servizi avanzati (o di runtime) possono essere : &lt;STRONG&gt;Mail&lt;/STRONG&gt;, &lt;STRONG&gt;Fax&lt;/STRONG&gt;, &lt;STRONG&gt;Extarnal Services&lt;/STRONG&gt;, ecc..&lt;/P&gt;
&lt;P&gt;L’utilizzo dei servizi consente di realizzare un sistema secondo i canoni &lt;STRONG&gt;Services Oriented Architecture (SOA)&lt;/STRONG&gt; rendendo omogenei e interoperabili i servizi esposti dall’enterprise. SOA sfrutta gli standard di mercato come XML/SOAP e WS-* come definizione delle caratteristiche a cui i servizi esposti aderiscono per consentire comunicazioni sicure, scalabili, reliable, interoperabili, … &lt;/P&gt;
&lt;P&gt;Le specifiche WS-*, però, definiscono solo le caratteristiche a cui i WS devono sottostare, lasciando l’implementazione libera. In ambito &lt;STRONG&gt;Enterprise&lt;/STRONG&gt; tale libertà introduce la necessità di realizzare un’infrastruttura (o framework) che implementi i servizi base di WS-* mettendoli a disposizione dei WS in modo semplice e trasparente. Rendere i servizi sviluppati indipendenti da quelli base è inoltre garanzia di evoluzione: l’infrastruttura di base è in grado di evolvere seguendo i nuovi standard senza richiedere la modifica dei servizi sviluppati. La presenza di un framework, quindi, consente di poter realizzare una parte fondamentale della SOA disaccoppiando le applicazioni di business dalle caratteristiche d'infrastruttura creando un sistema omogeneo, aderente agli standard, facile da manutenere e da evolvere.&lt;/P&gt;
&lt;P&gt;L’ Infrastruttura applicativa dovrà inoltre consentire l’implementazione di differenti &lt;STRONG&gt;Message Exchange Pattern &lt;/STRONG&gt;(&lt;STRONG&gt;MEP&lt;/STRONG&gt;) attraverso tipologie di contratti differenti come ad esempio :&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Request/Reply&lt;/LI&gt;
&lt;LI&gt;OneWay&lt;/LI&gt;
&lt;LI&gt;Duplex&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;L’ Infrastruttura applicativa fornisce quindi dei servizi a valore aggiunto utilizzabili per tutti i servizi definiti all’interno ed all’esterno dell' Enterprise (sia servizi di basso livello sia servizi di business veri e propri), consentendo al programmatore applicativo di concentrarsi sulla logica della funzionalità specifica senza preoccuparsi della parte infrastrutturale. Inoltre consente di separare gli aspetti di gestione e configurazione dal codice di ciascuna funzionalità, permettendo a chi gestisce l’applicazione di modificare le caratteristiche infrastrutturali senza ricompilare l’applicazione. All’interno dei servizi di base l’ Infrastruttura applicativa è in grado di fornire anche le seguenti funzionalità a valore aggiunto:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Trasporto di informazioni di contesto indipendenti dai singoli servizi.&lt;/LI&gt;
&lt;LI&gt;Caching dei dati restituiti dai servizi&lt;/LI&gt;
&lt;LI&gt;Monitoraggio della comunicazione (tracing, performance counters)&lt;/LI&gt;
&lt;LI&gt;Indipendenza dei chiamanti dalla locazione fisica dei servizi (indirizzamento dinamico)&lt;/LI&gt;
&lt;LI&gt;Gestione centralizzata delle policies ed autoconfigurazione degli endpoint&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;prossiamanente vediamo come progettare e realizzare una infrastruttura applicativa con .NET&lt;/P&gt;
&lt;P&gt;--Mario&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8414442" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/EDA/default.aspx">EDA</category></item><item><title>Rese pubbliche le specifiche dei formati binari di Office 97-2007</title><link>http://blogs.msdn.com/mariofontana/archive/2008/02/17/rese-pubbliche-le-specifiche-dei-formati-binari-di-office-97-2007.aspx</link><pubDate>Sun, 17 Feb 2008 22:10:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7757077</guid><dc:creator>mfontana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/7757077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=7757077</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Da ieri sul &lt;a href="http://www.microsoft.com/interop/docs/officebinaryformats.mspx" target="_blank"&gt;sito di interop di Microsoft&lt;/a&gt; sono disponibili le specifiche del formato &lt;strong&gt;binario&lt;/strong&gt; di Office 97-2000-2003-XP-2007. Questo permette a chiunque di utilizzare liberamente anche il formato binario, &lt;a href="http://office.microsoft.com/en-us/products/HA102058151033.aspx" target="_blank"&gt;oltre a quello XML-based presente in Office 2007&lt;/a&gt;,&amp;#160; in aderenza alla &lt;a href="http://www.microsoft.com/interop/osp/default.mspx" target="_blank"&gt;Microsoft Open Specification Promise&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Le specifiche coprono i seguenti prodotti/tecnologie : &lt;em&gt;Word&lt;/em&gt;, &lt;em&gt;Excel&lt;/em&gt;, &lt;em&gt;PowerPoint&lt;/em&gt;, &lt;em&gt;Office Drawing&lt;/em&gt;, &lt;em&gt;Windows Compound Binary File Format Specification&lt;/em&gt;,&lt;em&gt;Windows Metafile Format (.wmf) Specification &lt;/em&gt;ed infine &lt;em&gt;Ink Serialized Format (ISF) Specification&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7757077" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Information/default.aspx">Information</category></item><item><title>Specifiche di base: XML Encryption in pillole...</title><link>http://blogs.msdn.com/mariofontana/archive/2007/11/22/specifiche-di-base-xml-encryption-in-pillole.aspx</link><pubDate>Thu, 22 Nov 2007 13:52:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6468657</guid><dc:creator>mfontana</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/6468657.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=6468657</wfw:commentRss><description>&lt;p&gt;La specifica XML Encryption [&lt;i&gt;XMLENC xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'&lt;/i&gt; ] ha il compito di definire la sintassi e il processo per cifrare dei dati binari o testuali e rappresentarli in formato XML. La struttura XML della specifica si basa sull’elemento &lt;i&gt;EncryptedData&lt;/i&gt; : &lt;pre class="code"&gt;&amp;lt;EncryptedData Id? Type? MimeType? Encoding?&amp;gt;
    &amp;lt;EncryptionMethod/&amp;gt;?
    &amp;lt;ds:KeyInfo&amp;gt;
      &amp;lt;EncryptedKey&amp;gt;?
      &amp;lt;AgreementMethod&amp;gt;?
      &amp;lt;ds:KeyName&amp;gt;?
      &amp;lt;ds:RetrievalMethod&amp;gt;?
      &amp;lt;ds:*&amp;gt;?
    &amp;lt;/ds:KeyInfo&amp;gt;?
    &amp;lt;CipherData&amp;gt;
      &amp;lt;CipherValue&amp;gt;?
      &amp;lt;CipherReference URI?&amp;gt;?
    &amp;lt;/CipherData&amp;gt;
    &amp;lt;EncryptionProperties&amp;gt;?
  &amp;lt;/EncryptedData&amp;gt;
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;il quale può contenere o referenziare il documento cifrato (o ciphertext) permettendo due modalità diverse di rappresentazione : &lt;i&gt;Enveloping &lt;/i&gt;e &lt;i&gt;Detached&lt;/i&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLEncryptioninpillole_D668/Figura7.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="383" alt="Figura7" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLEncryptioninpillole_D668/Figura7_thumb.jpg" width="511" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Nel primo caso è presente l’elemento &lt;i&gt;CipherValue&lt;/i&gt; che contiene il ciphertext espresso in Base64 mentre nel secondo caso l’elemento &lt;i&gt;CipherReference&lt;/i&gt; punta ad una locazione dove è presente il ciphertext. In questo caso è stato utilizzato il termine &lt;i&gt;Detached&lt;/i&gt; &lt;i&gt;encryption &lt;/i&gt;e non &lt;i&gt;Enveloped encryption &lt;/i&gt;perchè in crittografia &lt;i&gt;Enveloped encryption &lt;/i&gt;ha un significato diverso. Infatti &lt;i&gt;Enveloped Encryption&lt;/i&gt; viene utilizzato per definire una operazione di cifratura un pò più complessa. Il testo in chiaro (o plaintext) viene cifrato con una chiave simmetrica (detta di sessione) generando un ciphertext. La chiave di sessione appena utilizzata (e generata) per l’encryption viene cifrata a sua volta da un’altra chiave (asimmetrica). La cifratura della chiave di sessione avviene tramite la chiave pubblica del destinatario (inteso come l’entità che deve decifrare il messaggio). Il ciphertext e la chiave di sessione cifrata devono essere presenti entrambi durante la fase di decryption possibile solo dal possessore della chiave privata associata. &lt;/p&gt;
&lt;p&gt;&lt;i&gt;EncryptionMethod&lt;/i&gt; è un elemento opzionale che indica quale algoritmo crittografico è stato utilizzato per le operazioni di cifratura. Nel caso questo elemento non fosse presente, il compito di ottenere tali informazioni è demandato al livello applicativo. In &lt;b&gt;tabella 1&lt;/b&gt; è presente uno schema riassuntivo degli algoritmi supportati dalla specifica. 
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLEncryptioninpillole_D668/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="421" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLEncryptioninpillole_D668/image_thumb.png" width="513" align="left" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;br&gt;Tabella 1.&lt;/strong&gt;
&lt;p&gt;L’elemento &lt;i&gt;KeyInfo&lt;/i&gt; serve per rappresentare le informazioni inerenti le chiavi di cifratura. Si noti che tale elemento è preceduto dal namespace &lt;i&gt;ds&lt;/i&gt; (&lt;i&gt;xmlns:ds='http://www.w3.org/2000/09/xmldsig#&lt;/i&gt;) della specifica [XMLDSIG]. Questo indica che le regole riguardanti questo elemento appartengono alla specifica di firma digitale. Per un maggiore dettaglio sull’argomento consultare la specifica [XMLDSIG] mentre per le possibili estensioni consultare la specifica [XMLENC]. 
&lt;p&gt;Un ’estensione importante è data dall’elemento &lt;i&gt;EncryptedKey&lt;/i&gt;. &lt;pre class="code"&gt;&amp;lt;element name=&lt;span style="color: rgb(163,21,21)"&gt;'EncryptedKey'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:EncryptedKeyType'&lt;/span&gt;/&amp;gt;
  &amp;lt;complexType name=&lt;span style="color: rgb(163,21,21)"&gt;'EncryptedKeyType'&lt;/span&gt;&amp;gt;
    &amp;lt;complexContent&amp;gt;
      &amp;lt;extension &lt;span style="color: rgb(0,0,255)"&gt;base&lt;/span&gt;=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:EncryptedType'&lt;/span&gt;&amp;gt;
        &amp;lt;sequence&amp;gt;
          &amp;lt;element &lt;span style="color: rgb(0,0,255)"&gt;ref&lt;/span&gt;=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:ReferenceList'&lt;/span&gt; minOccurs=&lt;span style="color: rgb(163,21,21)"&gt;'0'&lt;/span&gt;/&amp;gt;
          &amp;lt;element name=&lt;span style="color: rgb(163,21,21)"&gt;'CarriedKeyName'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'string'&lt;/span&gt; minOccurs=&lt;span style="color: rgb(163,21,21)"&gt;'0'&lt;/span&gt;/&amp;gt;
        &amp;lt;/sequence&amp;gt;
        &amp;lt;attribute name=&lt;span style="color: rgb(163,21,21)"&gt;'Recipient'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'string'&lt;/span&gt; use=&lt;span style="color: rgb(163,21,21)"&gt;'optional'&lt;/span&gt;/&amp;gt;
      &amp;lt;/extension&amp;gt;
    &amp;lt;/complexContent&amp;gt;   
  &amp;lt;/complexType&amp;gt;
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Tale elemento viene impiegato per la distribuzione delle chiavi simmetriche tramite il pattern definito in &lt;i&gt;Enveloped Encryption&lt;/i&gt;, dove la chiave simmetrica viene cifrata per ogni destinatario con un’altra chiave (chiave pubblica). &lt;i&gt;EncryptedKey&lt;/i&gt; può essere inserito come figlio di &lt;i&gt;ds:KeyInfo&lt;/i&gt;, come documento XML disgiunto, oppure come elemento all’interno dello stesso documento XML contenente un &lt;i&gt;ds:KeyInfo&lt;/i&gt;. 
&lt;p&gt;Il sottoelemento opzionale &lt;i&gt;ReferenceList&lt;/i&gt; indica quali chiavi simmetriche sono state cifrate mentre &lt;i&gt;CarriedKeyName&lt;/i&gt; e &lt;i&gt;Recipient&lt;/i&gt; danno ulteriori informazioni al contesto applicativo per individuare la chiave di cifratura. 
&lt;p&gt;L’elemento &lt;i&gt;CipherData&lt;/i&gt; è un dato obbligatorio e referenzia o contiene il ciphertext che sostituisce l’informazione in chiaro. Lo schema di &lt;i&gt;CipherData&lt;/i&gt; indica che sono possibili due valori : &lt;i&gt;CipherValue &lt;/i&gt;e &lt;i&gt;CipherReference&lt;/i&gt; &lt;pre class="code"&gt;&amp;lt;element name=&lt;span style="color: rgb(163,21,21)"&gt;'CipherData'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:CipherDataType'&lt;/span&gt;/&amp;gt;
  &amp;lt;complexType name=&lt;span style="color: rgb(163,21,21)"&gt;'CipherDataType'&lt;/span&gt;&amp;gt;
     &amp;lt;choice&amp;gt;
       &amp;lt;element name=&lt;span style="color: rgb(163,21,21)"&gt;'CipherValue'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'base64Binary'&lt;/span&gt;/&amp;gt;
       &amp;lt;element &lt;span style="color: rgb(0,0,255)"&gt;ref&lt;/span&gt;=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:CipherReference'&lt;/span&gt;/&amp;gt;
     &amp;lt;/choice&amp;gt;
   &amp;lt;/complexType&amp;gt;
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;L’elemento &lt;i&gt;CipherValue&lt;/i&gt; rappresenta il ciphertext in formato Base64 mentre &lt;i&gt;CipherReference&lt;/i&gt; è un riferimento al ciphertext puntato tramite l’attributo URI. &lt;pre class="code"&gt;&amp;lt;element name=&lt;span style="color: rgb(163,21,21)"&gt;'CipherReference'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:CipherReferenceType'&lt;/span&gt;/&amp;gt;
   &amp;lt;complexType name=&lt;span style="color: rgb(163,21,21)"&gt;'CipherReferenceType'&lt;/span&gt;&amp;gt;
       &amp;lt;sequence&amp;gt;
         &amp;lt;element name=&lt;span style="color: rgb(163,21,21)"&gt;'Transforms'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'xenc:TransformsType'&lt;/span&gt; minOccurs=&lt;span style="color: rgb(163,21,21)"&gt;'0'&lt;/span&gt;/&amp;gt;
       &amp;lt;/sequence&amp;gt;
       &amp;lt;attribute name=&lt;span style="color: rgb(163,21,21)"&gt;'URI'&lt;/span&gt; type=&lt;span style="color: rgb(163,21,21)"&gt;'anyURI'&lt;/span&gt; use=&lt;span style="color: rgb(163,21,21)"&gt;'required'&lt;/span&gt;/&amp;gt;
   &amp;lt;/complexType&amp;gt;

   &amp;lt;complexType name=&lt;span style="color: rgb(163,21,21)"&gt;'TransformsType'&lt;/span&gt;&amp;gt;
      &amp;lt;sequence&amp;gt;
        &amp;lt;element &lt;span style="color: rgb(0,0,255)"&gt;ref&lt;/span&gt;=&lt;span style="color: rgb(163,21,21)"&gt;'ds:Transform'&lt;/span&gt; maxOccurs=&lt;span style="color: rgb(163,21,21)"&gt;'unbounded'&lt;/span&gt;/&amp;gt; 
      &amp;lt;/sequence&amp;gt;
   &amp;lt;/complexType&amp;gt;
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Anche in questo caso, come in [XMLDSIG] è possibile effettuare delle trasformazioni per processare i dati. Le operazioni di trasformazione però sono state concepite in modo diverso rispetto alla specifica di firma digitale. Infatti in [XMLDSIG] il processo di generazione e di validazione utilizza sempre gli stessi dati di input (sempre il plaintext) ed applica le trasformazioni nello stesso ordine.Vicecersa, in [XMLENC], le operazioni di cifratura e decifratura partono da input diversi (rispettivamente il plaintext e il ciphertext) e la specifica indica che l’ordine in cui sono impostate le trasformazioni sono da intendersi solo per l’operazione di decifratura. Questo significa che durante la fase di cifratura le operazioni vengono svolte nell’ordine inverso. A causa di queste diversità il sottoelemento &lt;i&gt;Transforms&lt;/i&gt; è definito all’interno del namespace di [XMLENC]. 
&lt;p&gt;Infine l’ultimo elemento opzionale di EncryptedData è &lt;i&gt;EncryptionProperties&lt;/i&gt; che rappresenta un insieme di informazioni aggiuntive per l’applicazione di decrypt come ad esempio il timestamp o informazioni rigurdanti device crittografici o settaggi software per la decifratura. 
&lt;p&gt;In seguito sono riportati alcuni esempi di applicazione , tratti dalla specifica, di questa RFC a porzioni di documenti XML:
&lt;p&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; Informazione in chiaro&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;--&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;PaymentInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://example.org/paymentv2&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;John Smith&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CreditCard&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Limit&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;5,000&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Currency&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;USD&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Number&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;4019 2445 0277 5567&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Number&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Issuer&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;Example Bank&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Issuer&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Expiration&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;04/02&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Expiration&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CreditCard&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;PaymentInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; Cifratura dell'elemento CreditCard&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;--&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;PaymentInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://example.org/paymentv2&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;John Smith&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;EncryptedData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2001/04/xmlenc#Element&lt;/span&gt;'&lt;br&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;A23B45C56&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;EncryptedData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;PaymentInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; Cifratura di parte del contenuto dell' elemento CreditCard&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;--&amp;gt;&lt;br&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;PaymentInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://example.org/paymentv2&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;John Smith&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CreditCard&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Limit&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;5,000&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Currency&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;USD&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;EncryptedData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;'&lt;br&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2001/04/xmlenc#Content&lt;/span&gt;'&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;A23B45C56&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;EncryptedData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;CreditCard&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;PaymentInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#000000"&gt;Esempio di cifratura secondo il pattern Enveloped Encryption. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;S:Envelope
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns:S&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2001/12/soap-envelope&lt;/span&gt;"
&lt;span style="color: rgb(0,0,255)"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns:ds&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2000/09/xmldsig#&lt;/span&gt;"
&lt;span style="color: rgb(0,0,255)"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns:wsse&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;http://schemas.xmlsoap.org/ws/2002/04/secext&lt;/span&gt;"
&lt;span style="color: rgb(0,0,255)"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;xmlns:xenc&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;http://www.w3.org/2001/04/xmlenc#&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;S:Header&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;wsse:Security&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:EncryptedKey&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:EncryptionMethod&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Algorithm&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;...&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ds:KeyInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ds:KeyName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;CN=Mario Fontana, C=IT&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ds:KeyName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ds:KeyInfo&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;...&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:ReferenceList&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:DataReference&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;URI&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;#bodyID&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:ReferenceList&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:EncryptedKey&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;wsse:Security&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;S:Header&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;S:Body&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:EncryptedData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;bodyID&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;...&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherValue&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:CipherData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xenc:EncryptedData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;S:Body&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;S:Envelope&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;font color="#000000"&gt;Il documento XML è formato dall’elemento &lt;em&gt;xenc:EncryptedKey &lt;/em&gt;il quale contiene le informazioni sulle chiavi simmetriche e asimmetriche e un secondo elemento &lt;em&gt;xenc:EncrytpedData &lt;/em&gt;contenente il ciphertext dei dati applicativi. Vediamo durante le due fasi (encryption e decryption) quali sono i passi che un’applicazione deve seguire: nella fase di creazione del documento XML l’applicazione genera una chiave di sessione SK1 che utilizza per cifrare le informazioni sensibili creando l’elemento xenc:EncryptedData che sostituisce al plaintext. A questo punto determina il destinatario del messaggio secondo la propria logica applicativa e utilizza la relativa chiave pubblica per cifrare SK1 che, in formato cifrato, viene inserita in xenc:CipherValue e imposta l’URI in xenc:DataReference per associare i dati cifrati con la chiave di sessione. Successivamente l’applicazione crea l’elemento ds:KeyInfo che tramite il sottoelemento ds:KeyName inserisce una stringa (“CN = Mario Fontana, C=IT”) che l’applicazione utilizzerà per iniziare il processo di decifratura tramite l’uso della corrispettiva chiave privata. In fase di decifratura l’applicazione, partendo dalla stringa in ds:KeyName, accede alla chiave privata e decifra il contenuto in xenc:CipherValue. Tale contenuto è la chiave di sessione SK1 che verrà utilizzata per decifrare la porzione XML referenziata da xenc:DataReference (in questo caso “#bodyID”) che punta ovviamente ad un blocco xenc:EncryptedData. Con questo meccanismo è possibile risolvere il problema della cifratura di informazioni applicative oltre al problema della distribuzione delle chiavi.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6468657" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category></item><item><title>Specifiche di base : XML Digital Signature in pillole...</title><link>http://blogs.msdn.com/mariofontana/archive/2007/10/30/specifiche-di-base-xml-digital-signature-in-pillole.aspx</link><pubDate>Tue, 30 Oct 2007 17:22:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5781116</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/5781116.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=5781116</wfw:commentRss><description>&lt;p&gt;Per chi di voi ha partecipato al &lt;a href="http://blogs.msdn.com/mariofontana/archive/2007/10/19/panel-security-al-wpc-2007-soa-e-sicurezza-applicativa-le-sfide-di-oggi-e-di-domani.aspx" target="_blank"&gt;Panel della sicurezza&lt;/a&gt; che ho tenuto a WPC 2007 (&lt;a href="http://blogs.msdn.com/mariofontana/archive/2007/10/27/slides-del-panel-sicurezza-a-wpc-2007.aspx" target="_blank"&gt;o letto le slides&lt;/a&gt;) può capire il perchè sto scrivendo questa serie di post... "in pillole". Infatti per comprendere completamente alcuni nuovi attacchi sul fronte XML/Web Services è necessario approfondire il funzionamento di alcune specifiche di sicurezza nel mondo XML, perciò... eccoci qua :-)&lt;/p&gt; &lt;p&gt;XML Digital Signature [XMLDSIG&amp;nbsp; xmlns="&lt;a href="http://www.w3.org/2000/09/xmldsig#&amp;quot;]"&gt;http://www.w3.org/2000/09/xmldsig#"]&lt;/a&gt; è il risultato di un lavoro congiunto tra il W3C e IETF. Lo scopo di questa specifica è di definire una sintassi XML e un insieme di regole per la creazione, la rappresentazione e la verifica di una o più firme digitali generate da documenti binari o XML. Al contrario XMLDSIG non si occupa del problema della generazione delle chiavi crittografiche, dell’associazione di tali chiavi ad utenti, servizi o processi e dei lagami di trust che devono essere impostati tra chi firma e chi verifica. Questa scelta permette di evidenziare la differenza tra le operazioni crittografiche e le policy di validazione che possono cambiare a seconda dello scenario applicativo.&lt;br&gt;La specifica prevede tre modalità per applicare le firme digitali in un formato XML: &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Enveloped&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Enveloping&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Detached&lt;/strong&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLDigitalSignatureinpi_BD13/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="415" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLDigitalSignatureinpi_BD13/image_thumb.png" width="529" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Come si può notare ciò che distingue una modalità dall’altra è il posizionamento dell’elemento &lt;strong&gt;&amp;lt;Signature&amp;gt; &lt;/strong&gt;rispetto al documento firmato. Nel caso di &lt;em&gt;Enveloped &lt;/em&gt;il contenuto da firmare contiene l'elemento &lt;em&gt;&amp;lt;Signature&amp;gt; &lt;/em&gt;mentre si ha la situazione inversa nel formato &lt;em&gt;Enveloping&lt;/em&gt;. La modalità &lt;em&gt;Detached &lt;/em&gt;indica che il documento da firmare è completamente disgiunto dal documento contenente la firma digitale. [XMLDSIG] XML Digital Signature può firmare contemporaneamente più entità rendendo possibile associare in un unico documento XML le diverse modalità di firma. &lt;/p&gt; &lt;p&gt;Nella figura sottostante è rappresentato un esempio di documento XML firmato secondo la specifica [XMLDSIG] nel formato Enveloping. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLDigitalSignatureinpi_BD13/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="308" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLDigitalSignatureinpi_BD13/image_thumb_1.png" width="521" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;La struttura di un file XML firmato secondo la specifica è il seguente :&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Sans Unicode"&gt;&amp;lt;&lt;b&gt;Signature&lt;/b&gt; ID?&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;b&gt;SignedInfo&lt;/b&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CanonicalizationMethod/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SignatureMethod/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;lt;Reference URI? &amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;lt;Transforms&amp;gt;)?&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DigestMethod&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;font size="2"&gt;DigestValue&lt;/font&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Reference&amp;gt;)+&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SignedInfo&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;b&gt;SignatureValue&lt;/b&gt;&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;lt;&lt;b&gt;KeyInfo&lt;/b&gt;&amp;gt;)?&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;lt;Object ID?&amp;gt;)*&lt;br&gt;&amp;lt;/Signature&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Come si può notare il file XML firmato contiene un elemento &lt;em&gt;Signature &lt;/em&gt;al cui interno troviamo tre aree principali: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;SignedInfo &lt;/strong&gt; &lt;li&gt;&lt;strong&gt;SignatureValue &lt;/strong&gt; &lt;li&gt;&lt;strong&gt;KeyInfo&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;SignedInfo&lt;/em&gt;, il cui schema è :&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element name="SignedInfo" type="ds:SignedInfoType"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;complexType name="SignedInfoType"&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;sequence&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;element ref="ds:CanonicalizationMethod"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;element ref="ds:SignatureMethod"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;element ref="ds:Reference" maxOccurs="unbounded"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/sequence&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;attribute name="Id" type="ID" use="optional"/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: 'Letter Gothic'; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&amp;lt;/complexType&amp;gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;rappresenta sempre il primo elemento di &lt;i&gt;ds:Signature &lt;/i&gt;e racchiude il contenuto da firmare e tutte le informazioni necessarie per rappresentare e gestire tali informazioni. &lt;br&gt;Infatti il primo sottoelemento obbligatorio, &lt;i&gt;CanonicalizationMethod&lt;/i&gt;, indica quale algoritmo di normalizzazione deve essere applicato a tutto &lt;i&gt;SignedInfo &lt;/i&gt;mentre &lt;i&gt;SignatureMethod&lt;/i&gt;,anch’esso obbligatorio, rappresenta l’algoritmo di firma da utilizzare alla forma normalizzata di &lt;i&gt;SignedInfo&lt;/i&gt;. L’elemento &lt;i&gt;Reference&lt;/i&gt; (maxOccurs="unbounded" significa che possono essere presenti un numero arbitrario di elementi di questo tipo) raccoglie l’informazione da firmare. Lo schema di Reference  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&amp;lt;element name="Reference" type="ds:ReferenceType"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;complexType name="ReferenceType"&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-bidi-font-size: 8.0pt"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;sequence&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;element ref="ds:Transforms" minOccurs="0"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;element ref="ds:DigestMethod"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;element ref="ds:DigestValue"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/sequence&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;attribute name="Id" type="ID" use="optional"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;attribute name="URI" type="anyURI" use="optional"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;attribute name="Type" type="anyURI" use="optional"/&amp;gt; &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Letter Gothic'"&gt;&lt;font size="2"&gt;&lt;font face="Lucida Sans Unicode"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/complexType&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;ci mostra chiaramente che :  &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;il contenuto da firmare non è il documento stesso ma bensi l’hash del documento (&lt;i&gt;DigestMethod &lt;/i&gt;e &lt;i&gt;DigestValue&lt;/i&gt;) più le informazioni di rappresentazione.&lt;/strong&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Quindi la specifica prevede che per ogni documento da firmare vi sia un corrispondente elemento &lt;i&gt;Reference&lt;/i&gt; all’interno di &lt;i&gt;ds:SignedInfo &lt;/i&gt;il quale contiene l’informazione dell’algoritmo di hashing da applicare al documento in chiaro e il rispettivo valore di hash convertito in Base64. L’elemento opzionale &lt;i&gt;Transform &lt;/i&gt;permette di specificare una sequenza di trasformazioni (dalle più semplici come Base64, Canonicalization a soluzioni più complesse basate su XPath o XSLT) da applicare al documento prima di essere firmato garantendo la massima flessibilità nella gestione dei dati.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLDigitalSignatureinpi_BD13/Figura6.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="177" alt="Figura6" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLDigitalSignatureinpi_BD13/Figura6_thumb.jpg" width="522" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Queste informazioni verranno utilizzate durante la fase di firma e di verifica. Nell’esempio precedente possiamo vedere che l’elemento &lt;i&gt;SignedInfo&lt;/i&gt; contiene il riferimento all’algoritmo di canonicalizzazione &lt;a href="http://blogs.msdn.com/mariofontana/archive/2007/09/17/specifiche-di-base-xml-canonicalization.aspx" target="_blank"&gt;C14N&lt;/a&gt; (&lt;i&gt;"http://www.w3.org/TR/2001/REC-xml-c14n-20010315"&lt;/i&gt;), l’algoritmo di firma il quale indica che è stata usata una coppia di chiavi asimmetriche di tipo RSA (&lt;i&gt;“http://www.w3.org/2000/09/xmldsig#rsa-sha1”&lt;/i&gt;) ed infine &lt;em&gt;Reference&lt;/em&gt; contiene l’algoritmo di hash utilizzato (&lt;i&gt;“http://www.w3.org/2000/09/xmldsig#sha1"&lt;/i&gt;) oltre al valore espresso in Base64 (&lt;i&gt;/mTHMHggNBeZJV8ToGqQwNkgs9s&lt;/i&gt;) della parte di documento XML da firmare referenziato tramite l’attributo &lt;i&gt;URI=”#Persone”&lt;/i&gt;.  &lt;p&gt;Tornando agli elementi che compongono &lt;i&gt;ds:Signature&lt;/i&gt; troviamo l’elemento &lt;i&gt;SignatureValue&lt;/i&gt; il quale semplicemente contiene la firma digitale vera e propria dell’elemento &lt;i&gt;SignedInfo&lt;/i&gt; espressa in Base64. Quindi [XMLDSIG] concepisce la firma di uno o più documenti raccogliendo tutte le informazioni all’interno dell’elemento &lt;i&gt;SignedInfo &lt;/i&gt;(riferimenti ai dati da firmare interni allo stesso documento o esterni, gli algoritmi di hash e gli stessi hash) ed infine, firma direttamente &lt;i&gt;SignedInfo&lt;/i&gt; utilizzando l’algoritmo di canonicalizzazione e di firma specificati. Nell’esempio precedente&amp;nbsp; il valore espresso in &lt;i&gt;SignatureValue&lt;/i&gt; è quindi il prodotto della seguente sequenza:  &lt;blockquote&gt; &lt;p&gt;&lt;i&gt;&lt;strong&gt;Firma_rsa-sha1(C14N(SignedInfo))&lt;/strong&gt;&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Infine l’elemento opzionale &lt;i&gt;KeyInfo&lt;/i&gt; permette di specificare come ottenere la chiave necessaria alla verifica del messaggio. Questo elemento è opzionale in quanto in alcuni scenari le informazioni sulle chiavi fanno parte del contesto applicativo e la specifica, come detto in precedenza, non vuole dare nessuna restrizione alle applicazioni.&lt;br&gt;Lo schema di KeyInfo :  &lt;p&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element name="KeyInfo" type="ds:KeyInfoType"/&amp;gt; &lt;br&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;complexType name="KeyInfoType" mixed="true"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;choice maxOccurs="unbounded"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:KeyName"/&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:KeyValue"/&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:RetrievalMethod"/&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:X509Data"/&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:PGPData"/&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:SPKIData"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;element ref="ds:MgmtData"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;any processContents="lax" namespace="##other"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;!-- (1,1) elements from (0,unbounded) namespaces --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;/choice&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;attribute name="Id" type="ID" use="optional"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font face="Lucida Sans Unicode" size="2"&gt;&amp;lt;/complexType&amp;gt;&lt;/font&gt;  &lt;p&gt;dimostra che sono contemplati vari tipi di &lt;i&gt;KeyInfo&lt;/i&gt;. In aggiunta a questi tipi ai quali è stata associata una struttura XML [XMLDSIG] prevede un ulteriore formato, chiamato &lt;i&gt;rawX509Certificate&lt;/i&gt;, che permette di gestire un certificato X509 (binario) codificato in ASN.1 DER. Nel nostro esempio utilizziamo semplicemente l’elemento &lt;i&gt;KeyValue&lt;/i&gt; al cui interno è contenuta la chiave pubblica RSA espressa tramite &lt;i&gt;&amp;lt;Modulus&amp;gt; &lt;/i&gt;e &lt;i&gt;&amp;lt;Exponent&amp;gt;&lt;/i&gt;.  &lt;p&gt;&lt;strong&gt;La fase di verifica della firma digitale avviene in due fasi &lt;/strong&gt;:  &lt;ol&gt; &lt;li&gt;la verifica degli hash contenuti all’interno di ogni &lt;i&gt;Reference&lt;/i&gt;&amp;nbsp; &lt;li&gt;la verifica della firma applicata all’elemento &lt;i&gt;SignedInfo&lt;/i&gt;. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;La prima fase prevede la normalizzazione di tutto &lt;i&gt;SignedInfo&lt;/i&gt; secondo l’algoritmo espresso in &lt;i&gt;CanonicalizationMethod &lt;/i&gt;presente sempre nello stesso &lt;i&gt;SignedInfo&lt;/i&gt;. In seguito, per ogni elemento &lt;i&gt;Reference&lt;/i&gt; si ottiene il documento da verificare tramite l’attributo URI, gli si applicano eventuali trasformazioni, si calcola l’hash utilizzando l’algoritmo identificato in &lt;i&gt;DigestMethod&lt;/i&gt; ed infine lo si paragona con il valore salvato in &lt;i&gt;DigestValue&lt;/i&gt;. &lt;/p&gt; &lt;p&gt;Nella seconda fase invece si ottengono le informazioni riguardanti le chiavi crittografiche e si verifica la firma digitale applicata all’elemento &lt;i&gt;SignedInfo&lt;/i&gt; tramite l’algoritmo specificato in &lt;i&gt;SignatureMethod&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;L’analisi della specifica [XMLDSIG] in questo contesto non è completa ma è sufficiente per introdurre WS-Security, la specifica di base per la sicurezza dei Web Services standardizzata da OASIS.  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5781116" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category></item><item><title>Slides del Panel Sicurezza a WPC 2007</title><link>http://blogs.msdn.com/mariofontana/archive/2007/10/27/slides-del-panel-sicurezza-a-wpc-2007.aspx</link><pubDate>Sat, 27 Oct 2007 12:42:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5707841</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/5707841.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=5707841</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://cid-058b7d5369e7f704.skydrive.live.com/self.aspx/Public/Eventi/WPC2007_Panel_Security_FINAL.pdf" target="_blank"&gt;Qui potete trovare le slides&lt;/a&gt; che ho utilizzato per il &lt;strong&gt;Panel Sicurezza &lt;/strong&gt;: "&lt;em&gt;SOA e Sicurezza Applicativa. Le sfide di oggi e di domani&lt;/em&gt;".&lt;/p&gt; &lt;p&gt;Durante i giorni del WPC ho avuto modo di parlare con molte persone interessate alle problematiche di sicurezza in SOA e ho raccolto e "consolidato" una serie di aree tematiche di interesse comune sulle quali farò dei post di approfondimento.&lt;/p&gt; &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5707841" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/SDL/default.aspx">SDL</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/IDentity+Metasystem/default.aspx">IDentity Metasystem</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/CardSpace/default.aspx">CardSpace</category></item><item><title>Panel Security al WPC 2007 : SOA e Sicurezza Applicativa. Le sfide di oggi e di domani.</title><link>http://blogs.msdn.com/mariofontana/archive/2007/10/19/panel-security-al-wpc-2007-soa-e-sicurezza-applicativa-le-sfide-di-oggi-e-di-domani.aspx</link><pubDate>Fri, 19 Oct 2007 17:37:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5524358</guid><dc:creator>mfontana</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/5524358.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=5524358</wfw:commentRss><description>&lt;p&gt;Per chi di voi sarà al &lt;a href="http://wpc.education.mondadori.it/Document.asp?IdDoc=1099" target="_blank"&gt;WPC 2007&lt;/a&gt; spero di incontrarvi al panel sulla sicurezza &lt;em&gt;"&lt;/em&gt;&lt;a href="http://wpc.education.mondadori.it/SchedaSessione.asp?IdSessione=SEC014" target="_blank"&gt;SOA e Sicurezza Applicativa. Le sfide di oggi e di domani"&lt;/a&gt; che terrò &lt;strong&gt;martedi 23 Ottobre&lt;/strong&gt; dalle 19.15 alle 20.00. Come orario un po' tardino... a mo' di aperativo prima della cena :-) &lt;br&gt;&lt;br&gt;Il formato del panel è pensato apposta per sessioni interattive... poche slides (tanto per inquadrare i punti chiavi) e poi via con le domande e un confronto tra noi e le nostre esperienze sui progetti... &lt;br&gt;E per chi non ne avesse abbastanza la sera dopo cena, questa volta a mo' di digestivo, sarò nell'area "Technical Afterhour" per fare quattro chiacchiere...&lt;/p&gt; &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5524358" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/SDL/default.aspx">SDL</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/IDentity+Metasystem/default.aspx">IDentity Metasystem</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/CardSpace/default.aspx">CardSpace</category></item><item><title>Agenda del WebCast sull' Identity &amp;amp; Access Management</title><link>http://blogs.msdn.com/mariofontana/archive/2007/09/27/agenda-del-webcast-sull-identity-access.aspx</link><pubDate>Thu, 27 Sep 2007 01:11:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5153348</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/5153348.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=5153348</wfw:commentRss><description>&lt;p&gt;Questa è la versione definitiva dell'agenda del Webcast che ho fatto sull' Identity &amp;amp; Access Management presentato &lt;a href="http://blogs.msdn.com/mariofontana/archive/2007/09/20/il-primo-webcast-non-si-scorda-mai.aspx" target="_blank"&gt;qui&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Agenda&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Identity &amp;amp; Access Management Overview.  &lt;li&gt;Cosa intendiamo per Digital Identity.  &lt;li&gt;Identity Design Patterns.  &lt;li&gt;Scenari architetturali.  &lt;li&gt;Identity MetaSystem.  &lt;li&gt;Identity LifeCycle Management.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Potete scaricare &lt;a href="http://cid-058b7d5369e7f704.skydrive.live.com/self.aspx/Public/Webcasts/03%20WCast%20Identity_Access.pdf" target="_blank"&gt;le slides&lt;/a&gt; mentre l'intero WebCast è disponibile per il download &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=it-IT&amp;amp;EventID=1032351276&amp;amp;CountryCode=IT" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5153348" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Webcast/default.aspx">Webcast</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/SDL/default.aspx">SDL</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/IDentity+Metasystem/default.aspx">IDentity Metasystem</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/CardSpace/default.aspx">CardSpace</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/ADFS/default.aspx">ADFS</category></item><item><title>Il primo Webcast non si scorda mai...</title><link>http://blogs.msdn.com/mariofontana/archive/2007/09/20/il-primo-webcast-non-si-scorda-mai.aspx</link><pubDate>Thu, 20 Sep 2007 22:50:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5017453</guid><dc:creator>mfontana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/5017453.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=5017453</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/italy/msdn/risorsemsdn/architetti/path/default.mspx" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="58" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WebCast_10056/clip_image001_3.jpg" width="170" align="left" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;u&gt;Giovedì 27 Settembre &lt;/u&gt;farò il mio &lt;strong&gt;primo &lt;/strong&gt;Webcast...(quello che non si scorda mai:-). Il tema trattato è una &lt;strong&gt;overview sull'identity management &lt;/strong&gt;nelle architetture service oriented. &lt;a href="http://www.microsoft.com/italy/msdn/risorsemsdn/eventi/webcast/architetti/default.mspx" target="_blank"&gt;Qui vi potete iscrivere!&lt;/a&gt; Vi aspetto numerosi...&lt;/p&gt; &lt;p&gt;Due notiziole extra... In questa sessione parlerò del "pilastro" &lt;em&gt;Identity &amp;amp; Access &lt;/em&gt;(&lt;strong&gt;Figura 1&lt;/strong&gt;) presentato all'interno del&amp;nbsp; &lt;a href="http://www.microsoft.com/italy/msdn/risorsemsdn/architetti/path/default.mspx" target="_blank"&gt;percorso formativo per architetti&lt;/a&gt; che Giuseppe Guerrasio ed io abbiamo inaugurato il 13 Settembre. &lt;br&gt;Nel Webcast farò una breve panoramica delle forme di &lt;strong&gt;autenticazione&lt;/strong&gt;, &lt;strong&gt;identity flow &lt;/strong&gt;ed &lt;strong&gt;autorizzazione &lt;/strong&gt;focalizzandomi sulle principali sfide che gli Enterprise Architect e Solutions Architect devono affrontare nel disegno di soluzioni distribuite. Successivamente faremo degli approfondimenti su questo vastissimo argomento tramite post o articoli tecnici.&lt;br&gt;&lt;strike&gt;A breve pubblicherò l'agenda della sessione... &lt;/strike&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/mariofontana/archive/2007/09/27/agenda-del-webcast-sull-identity-access.aspx" target="_blank"&gt;ECCOLA :-)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WebCast_10056/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="355" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WebCast_10056/image_thumb.png" width="499" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;strong&gt;Figura 1&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Abstract del Webcast:&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Il tema dell'Identity &amp;amp; Access Management è uno degli aspetti più delicati&amp;nbsp; all'interno di una piattaforma pensata per la service orientation. L'evoluzione di Internet e la disponibilità di canali comunicazione sempre più affidabili e veloci, unitamente ai nuovi scenari di composizione ed aggregazione di servizi tra organizzazioni diverse, incrementa esponenzialmente l'importanza di questo aspetto rendendolo un fattore chiave. Le tematiche di federazione delle identità e dei nuovi standard nell'area della sicurezza nei web service diventano componenti fondamentali di una moderna architettura. In questa sessione analizzeremo la struttura tecologiche ed i principi architetturali presenti nella piattaforma Microsoft per rispondere efficacemente alle nuove esigenze in questa area.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5017453" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category></item><item><title>Specifiche di base : XML Canonicalization in pillole</title><link>http://blogs.msdn.com/mariofontana/archive/2007/09/17/specifiche-di-base-xml-canonicalization.aspx</link><pubDate>Mon, 17 Sep 2007 18:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4958099</guid><dc:creator>mfontana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/4958099.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=4958099</wfw:commentRss><description>&lt;p&gt;Iniziamo col dire cosa significa "Canonicalizzazione". La traduzione di Canonicalization, canonicalizzazione, significa rendere in forma canonica, normale. Quindi Canonicalizzazione = Normalizzazione (che è italiano :-)! &lt;p&gt;La specifica &lt;a href="http://www.w3.org/TR/xml-c14n" target="_blank" mce_href="http://www.w3.org/TR/xml-c14n"&gt;XML C14N&lt;/a&gt; è fondamentale per tutte le operazioni di crittografia nel mondo XML e&amp;nbsp; Web Services (e non solo). E' una specifica del 2001 ovvero possiamo considerarla "matura" nel giovane mondo XML! Capiamo perchè XML C14N è così importante e cosa dice a grandi linee maaaa.... prima di iniziare con i contenuti seri una piccola curiosità:  &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Questa specifica viene spesso chiamata &lt;strong&gt;[XML&lt;/strong&gt; &lt;strong&gt;C14N]&lt;/strong&gt; perchè sono 14 lettere tra la &lt;strong&gt;C&lt;/strong&gt; e la &lt;strong&gt;N&lt;/strong&gt; di &lt;strong&gt;Canonicalization&lt;/strong&gt; :-)&lt;/em&gt; ... svelato il mistero....&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Adesso torniamo seri...&lt;br&gt;Le specifiche di XML Canonicalization si occupano della normalizzazione delle informazioni in una forma universalmente riconosciuta. Queste due specifiche&lt;b&gt; &lt;/b&gt;(&lt;i&gt;Canonical XML 1.0 del 15 Marzo 2001 &lt;/i&gt;e &lt;i&gt;Exclusive XML Canonicalization 1.0 del 18 Luglio 2002&lt;/i&gt;) nascono per risolvere il problema della rappresentazione dello stesso XML Infoset (XML data model astratto – Ver. &lt;i&gt;http://www.w3.org/TR/2001/REC-xml-infoset-20011024 del 24 Ottobre 2001&lt;/i&gt;) in formati sintattici e contesti diversi. Si considerino le seguenti rappresentazioni XML :  &lt;p&gt;&lt;em&gt;&amp;lt;persona nome=’Mario’ eta=”35”/&amp;gt;&lt;br&gt;&amp;lt;persona eta=’35’ nome=’Mario’/&amp;gt;&lt;br&gt;&amp;lt;persona nome=’Mario’ eta=’35’&amp;gt;&amp;lt;/persona&amp;gt;&lt;/em&gt;  &lt;p&gt;Questa libertà di rappresentare lo stesso XML Infoset è intrinseca nella serializzazione di XML 1.0 e pone dei problemi in alcune operazioni di crittografia come ad esempio la firma digitale. In &lt;strong&gt;figura 1&lt;/strong&gt;, ad esempio, un’unica informazione viene espressa in tre forme &lt;u&gt;diverse &lt;/u&gt;e durante l’operazione di encoding in byte streams (octets) si ottengono tre valori &lt;u&gt;diversi &lt;/u&gt;che producono ovviamente tre firme digitali &lt;u&gt;diverse&lt;/u&gt;. Infatti la firma digitale avviene tramite l’encryption con la chiave privata dell’hash dei dati da firmare! Poiché le tre rappresentazioni producono tre hash diversi di conseguenza si ottengono tre firme diverse. Perché questo è un problema? Il problema nasce quando un programma vuole verificare una firma digitale rispetto al XML Infoset. Senza un processo di normalizzazione condiviso nel caso precedente avremmo 1/3 delle probabilità che l'operazione di firma dia esito positivo!  &lt;p&gt;Questo aspetto è molto importante perchè la logica applicativa lavora molto spesso a livello di Infoset XML e non sulla singola rappresentazione creando problemi in fase di verifica delle informazioni crittografiche .  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image002_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="265" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image002_thumb.jpg" width="534" border="0" mce_src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image002_thumb.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;strong&gt;Figura 1&lt;/strong&gt;&amp;nbsp; &lt;p&gt;Inoltre durante il trasferimento dei dati, come ad esempio nelle operazioni di &lt;em&gt;Orchestration&lt;/em&gt;, le rappresentazioni possono cambiare e subire trasformazioni dettate dalle regole sintattiche di altre specifiche come SOAP.  &lt;p&gt;Anche la stessa natura del formato testo pone dei problemi di “compatibilità”. Alcuni esempi possono essere la diversa rappresentazione degli spazi alla fine delle righe, le tabulazioni, i caratteri di fine riga. Queste incongruenze devono quindi essere risolte prima di passare i dati in formato testo alle funzioni di crittografia. A questo proposito sono state create due specifiche: la prima, &lt;i&gt;Canonical XML 1.0 &lt;/i&gt;[XML-C14N], chiamata anche &lt;i&gt;Inclusive&lt;/i&gt;, descrive le regole di normalizzazione di un documento XML in byte stream. Queste regole prevedono che tutti gli attributi vengano dichiarati con i doppi apici, l’encoding debba essere in UTF-8, i tag debbano essere espressi nella forma estesa e gli attributi e i namespaces siano rappresentati in ordine alfabetico. Per una completa visione di queste regole si faccia riferimento alla specifica &lt;a href="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" target="_blank" mce_href="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"&gt;Canonical XML 1.0&lt;/a&gt; e &lt;a href="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/" target="_blank" mce_href="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/"&gt;Exclusive XML Canonicalization&lt;/a&gt; 1.0 .  &lt;p&gt;Applicando la funzione di &lt;i&gt;Canonical XML 1.0&lt;/i&gt; all’esempio precedente avremo il seguente output:  &lt;p&gt;&amp;lt;persona eta=”35” nome=”Mario”&amp;gt;&amp;lt;/persona&amp;gt;  &lt;p&gt;che genererà sempre la stessa firma digitale permettendo quindi l’operazione di verifica (&lt;strong&gt;Figura 2&lt;/strong&gt;).  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image004_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="268" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image004_thumb.jpg" width="540" border="0" mce_src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/SpecifichedibaseXMLCanonicalization_CCE7/clip_image004_thumb.jpg"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;Figura 2&lt;/strong&gt; &lt;p&gt;I limiti di questa specifica si evidenziano quando porzioni di documenti XML vengono spostati o copiati da un documento all’altro. Infatti la specifica prevede l’inserimento di alcune informazioni, come ad esempio le dichiarazioni dei namespaces appartenenti al messaggio XML originario nello stesso sottodocumento estratto, causando un cambiamento nella rappresentazione sintattica del documento stesso. Si è resa quindi necessaria una seconda specifica, &lt;i&gt;Exclusive XML Canonicalization 1.0&lt;/i&gt;, che permettesse di escludere le informazioni di contesto dalla parte del sottodocumento passato alla funzione di normalizzazione. Questa situazione è comune soprattutto nel mondo dei Web Services quando un documento XML viene firmato ed estrapolato da un contesto applicativo per essere inserito in un &lt;i&gt;SOAP:Envelope&lt;/i&gt; per la trasmissione. Nella fase di verifica il documento XML viene estratto dal &lt;i&gt;SOAP:Envelope &lt;/i&gt;e verificato. Ad esempio nel firmare digitalmente la seguente porzione di documento XML che chiamiamo XML&lt;sub&gt;1&lt;/sub&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;ns1:info xmlns:ns1="http://application"&amp;gt;&lt;br&gt;&amp;lt;ns1:persona eta="35" nome="Mario"&amp;gt;&amp;lt;/ns1:persona&amp;gt;&lt;br&gt;&amp;lt;/ns1:info&amp;gt;&lt;/em&gt;  &lt;p&gt;otteniamo la firma F1. Successivamente ipotizziamo di inserire XML&lt;sub&gt;1&lt;/sub&gt; all’interno di un altro elemento e chiamiamo XML&lt;sub&gt;2&lt;/sub&gt; il nuovo documento  &lt;p&gt;&lt;b&gt;&lt;em&gt;&amp;lt;ns0:app xmlns:ns0="http://transmission"&amp;gt;&lt;br&gt;&lt;/em&gt;&lt;/b&gt;&lt;em&gt;&amp;lt;ns1:info xmlns:ns1="http://application"&amp;gt;&lt;br&gt;&lt;/em&gt;&lt;em&gt;&amp;lt;ns1:persona eta="35" nome="Mario"&amp;gt;&amp;lt;/ns1:persona&amp;gt;&lt;br&gt;&lt;/em&gt;&lt;em&gt;&amp;lt;/ns1:info&amp;gt;&lt;br&gt;&lt;/em&gt;&lt;b&gt;&lt;em&gt;&amp;lt;/ns0:app&amp;gt;&lt;/em&gt;&lt;/b&gt;  &lt;p&gt;Nella operazione di verifica della firma F1 è necessario estrarre XML&lt;sub&gt;1&lt;/sub&gt; da XML&lt;sub&gt;2&lt;/sub&gt;.  &lt;p&gt;Questa operazione può essere effettuata con la creazione di un node-set XPath passato poi alla funzione di normalizzazione ottenendo il seguente risultato XML&lt;sub&gt;3&lt;/sub&gt;:  &lt;p&gt;&lt;em&gt;&amp;lt;ns1:info &lt;b&gt;xmlns:ns0=”http://transmission”&lt;/b&gt; xmlns:ns1="http://application"&amp;gt;&lt;br&gt;&lt;/em&gt;&lt;em&gt;&amp;lt;ns1:persona eta="35" nome="Mario"&amp;gt;&amp;lt;/ns1:persona&amp;gt;&lt;br&gt;&lt;/em&gt;&lt;em&gt;&amp;lt;/ns1:info&amp;gt;&lt;/em&gt;  &lt;p&gt;Come si può notare XML&lt;sub&gt;3&lt;/sub&gt; è diverso da XML&lt;sub&gt;1&lt;/sub&gt;.in quanto sono presenti alcune informazioni di contesto di XML&lt;sub&gt;2&lt;/sub&gt; che genereranno un errore in fase di verifica della firma digitale F1.  &lt;p&gt;&lt;i&gt;Exclusive XML Canonicalization 1.0&lt;/i&gt;, che non inserisce le informazioni di contesto, permette di riottenere esattamente XML&lt;sub&gt;1&lt;/sub&gt; e quindi di avere una corretta operazione di verifica.&lt;/p&gt; &lt;p&gt;Questa è una versione un po' aggiornata di un articolo che ho scritto nel 2003 per Visual Basic Journal...&lt;/p&gt; &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4958099" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category></item></channel></rss>