<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OCTO talks ! &#187; web-services</title>
	<atom:link href="http://blog.octo.com/tag/web-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.octo.com</link>
	<description>Le blog d&#039;OCTO Technology, cabinet d&#039;architectes en systèmes d&#039;information</description>
	<lastBuildDate>Fri, 03 Feb 2012 13:46:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Initiation à la sécurité des Web Services</title>
		<link>http://blog.octo.com/initiation-a-la-securite-des-web-services/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=initiation-a-la-securite-des-web-services</link>
		<comments>http://blog.octo.com/initiation-a-la-securite-des-web-services/#comments</comments>
		<pubDate>Tue, 31 May 2011 06:42:55 +0000</pubDate>
		<dc:creator>Mikael Robert</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[web-services]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=22840</guid>
		<description><![CDATA[Avec l&#8217;expansion des services en lignes via le cloud ou tout simplement l&#8217;interconnexion des SI, le besoin d&#8217;exposer des services vers l&#8217;extérieur est croissant. Les WebServices sont une solution maintenant éprouvée depuis longtemps pour répondre à ce besoin. Que l&#8217;on utilise SOAP ou REST un problème se pose toujours : comment faire pour sécuriser l&#8217;accès [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/securite-des-services-web-1ere-partie/' rel='bookmark' title='Sécurité des services web – 1ère partie'>Sécurité des services web – 1ère partie</a></li>
<li><a href='http://blog.octo.com/html5-offline-et-securite/' rel='bookmark' title='HTML5, offline et sécurité'>HTML5, offline et sécurité</a></li>
<li><a href='http://blog.octo.com/gwt-et-securite-se-premunir-des-csrf/' rel='bookmark' title='GWT et sécurité, se prémunir des CSRF'>GWT et sécurité, se prémunir des CSRF</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Finitiation-a-la-securite-des-web-services%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Initiation%20%C3%A0%20la%20s%C3%A9curit%C3%A9%20des%20Web%20Services%22%20%7D);"></div>
<p>Avec l&#8217;expansion des services en lignes via le cloud ou tout simplement l&#8217;interconnexion des SI, le besoin d&#8217;exposer des services vers l&#8217;extérieur est croissant. Les <strong>WebServices</strong> sont une solution maintenant éprouvée depuis longtemps pour répondre à ce besoin.</p>
<p>Que l&#8217;on utilise <strong>SOAP</strong> ou <strong>REST</strong> un problème se pose toujours : comment faire pour sécuriser l&#8217;accès à mon SI alors que j&#8217;en ouvre une porte en exposant mon métier ?<br />
Souvent utilisés au sein même d&#8217;un SI pour gérer des problématiques d&#8217;intégration ou d&#8217;hétérogénéité des technologies, les Web Services sont aussi de plus en plus souvent exposés sur le web ou à des partenaires.</p>
<p>Lorsque c&#8217;est possible, on voit souvent la mise en place d&#8217;un canal sécurisé type VPN entre les différents acteurs. Toutefois cela n&#8217;est pas toujours possible et cet article a pour but de vous présenter des notions de base liées à la sécurité des web services.</p>
<p>Ayant réalisé des missions, pour OCTO, aussi bien d&#8217;architecture que de développement autour ce sujet je vais tenter, via une série d&#8217;articles, de vous initier à ce domaine.<br />
La majorité des WebServices de nos clients étant en SOAP je me concentrerais beaucoup plus sur ces derniers.<br />
Cet article se voulant une initiation je ne suis pas rentré dans des détails très techniques, il a uniquement pour but d&#8217;attirer l&#8217;attention sur la vulnérabilité des protocoles de Web Services.</p>
<p><span id="more-22840"></span></p>
<h1>Identifier le besoin et les risques</h1>
<p>Lorsqu&#8217;on traite de sécurité il faut toujours commencer par se poser quelques questions</p>
<ol>
<li>Mes données sont elles sensibles?</li>
<li>Quel est le risque et quelles sont les conséquences pour mon SI si ces données sont capturées ou utilisés à mauvais escient ?</li>
<li>Quelle est la probabilité que quelqu&#8217;un attaque mon service ?</li>
</ol>
<p>Sans rentrer dans les détails de l&#8217;analyse de risque qui sort du périmètre de cet article, il est important d&#8217;avoir une bonne idée de la réponse à ces questions pour ensuite être capable de déterminer le niveau de sécurité nécessaire.</p>
<h1>Valider les données</h1>
<p>Une des failles de sécurité qu&#8217;on croise le plus dans les applications concerne les points d&#8217;entrée des données. Que ce soit un formulaire sur une page web ou un web service, tout point d&#8217;entrée de donnée vers votre application est potentiellement une faille de sécurité.<br />
Il est donc essentiel et critique de valider tout ce que les utilisateurs de votre application pourront envoyer à celle-ci.<br />
En effet un WebService est aussi vulnérable qu&#8217;un formulaire à l&#8217;injection SQL (passage de morceaux de requêtes SQL à un champ de donnée pour les faire interpréter par le serveur) et à d&#8217;autres exploit du même acabit. Pour plus de détails je vous invite à consulter <a href="https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project">cette page de l&#8217;OWASP</a>.<br />
De plus, la majorité des WebService utilisant SOAP et donc du XML sont vulnérables à toutes les failles induites par XML.</p>
<p>La validation des données entrées est donc critique pour éviter de nombreuses failles. Pour cela il existe de nombreux moyens.<br />
Première étape, utiliser un WSDL particulièrement stricte sur le typage des données et sur la taille des champs vous protégera déjà de nombreux problèmes.<br />
De la même manière je ne peux rentrer dans les détails sans trop m&#8217;étendre, mais la mise en place de DTD, voir mieux de XSD, est un très bon levier.<br />
En effet l&#8217;adresse d&#8217;un DTD étant indiquée dans le XML, un utilisateur mal attentionné pourra la modifier dans le message qu&#8217;il vous envoi, pour changer la méthode de validation des données par celle de son choix (beaucoup plus permissive).  Dans le cas d&#8217;un XSD seul le serveur sait quel XSD utiliser pour valider le contenu.<br />
Pour les champs spécifiques (adresse email, url&#8230;) utiliser des expressions régulières stricte pour valider est une bonne pratique.<br />
Enfin, réfléchissez toujours bien à l&#8217;impact des données que l&#8217;utilisateur peut vous envoyer et donc manipuler.</p>
<p>Avant de vous présenter quelques failles induites par les WebServices SOAP, je tiens à rappeler qu&#8217;il est très facile pour un utilisateur mal intentionné de forger des messages SOAP avec des outils tels que soapUI. A la base conçu pour tester les WebServices cet outil s&#8217;avère formidable pour les attaquer en forgeant des messages.</p>
<h2>SOAP &amp; XML</h2>
<h2>Quelques attaques de type DoS (Denial of Service)</h2>
<h3>Buffer Overflow</h3>
<p>SOAP a le gros avantage d&#8217;être un protocole très souple, ce qui est une qualité indéniable mais aussi un gros défaut en terme de sécurité.<br />
La souplesse de SOAP réside essentiellement dans la possibilité d&#8217;encapsuler à peu près ce que l&#8217;on veut (tant que c&#8217;est un XML valide) dans un message SOAP.<br />
Premier problème : aucune contrainte de <strong>taille</strong>.<br />
Ce type d&#8217;attaque est généralement couvert par le framework de WebService que vous utilisez (sauf si celui-ci est vraiment obsolète).<br />
Néanmoins un utilisateur mal intentionné qui souhaite réalise un DoS (Denial Of Service) sur votre application pourra s&#8217;amuser à essayer d&#8217;envoyer un message énorme à vos WebService pour tenter de faire planter le parseur XML qui va démarshaller le message SOAP.<br />
C&#8217;est bien entendu les parseurs de type DOM qui chargent tout le message XML en mémoire avant de l&#8217;interpréter qui sont vulnérable à ce type de problèmes.<br />
Ce type d&#8217;attaque amène à un problème de type BufferOverflow qui induit souvent au plantage complet de l&#8217;application.</p>
<p>Il est donc crucial de vérifier la taille des messages reçus avant de tenter de les interpréter.</p>
<h3>Récursion infinie</h3>
<p>Il s&#8217;agit ici d&#8217;envoyer un XML récursif au web service. Si le parseur est de type XPath il va partir en boucle infinie.<br />
Exemple :<br />
<code></p>

<div class="wp_codebox"><table><tr id="p228403"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p22840code3"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;credit<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;credit<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;credit<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>….</pre></td></tr></table></div>

<p></code></p>
<h2>D&#8217;autres attaques &#8230;</h2>
<h3>XML Injection</h3>
<p>L’idée ici est plutôt d’outrepasser les validateurs de données pour détourner l’usage prévu du Web Service.</p>
<p>Un exemple bien parlant :<br />
<code></p>

<div class="wp_codebox"><table><tr id="p228404"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p22840code4"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;transaction<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;total<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>4000.00<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;total<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;credit_card_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>123456789<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/credit_card_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;total<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>6.66<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/total<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;credit_card_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>123456789 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/credit_card_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;expiration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>17112010<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/expiration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/transaction<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p></code></p>
<p>En répétant la balise total, l’attaquant tente de changer les valeurs démarshallées par le Web Service pour ainsi payer 6,66 au lieu de 4000 euros. Cet exemple est volontairement simpliste mais, croyez moi, je suis déjà tombé sur des cas ou cela fonctionne.</p>
<h3>XPath Injection</h3>
<p>L’idée ici est d’attaquer les parseurs de type <strong>XPath</strong>. En effet si vos requêtes XPath se basent sur les entrées utilisateurs le parseur risque d’interpréter des choses <strong>non prévus</strong> :</p>
<p>Exemple :<br />
<em>//users/custid[123]</em> va aller récupérer l’utilisateurs ayant pour ID 123, ici l’utilisateur bienveillant à bien mis son Id donc tout va bien.</p>
<p><em>//users/custid[./age &gt; 1]</em> va aller récupérer tous les utilisateurs dont l’âge est supérieur à 1, ici l’utilisateur malveillant à tenté de mettre un bout de XPath en paramètre et le résultat est assez facile à deviner :)</p>
<p>L&#8217;index de requête étant passé en paramètre cela autorise l&#8217;utilisateur à utiliser un identifiant client différent du sien. Il est ainsi libre de récupérer les données de tous les utilisateurs de l&#8217;application.</p>
<h2>Failles XML &amp; SOAP : comment s’en prémunir</h2>
<p>Globalement la réponse est très simple : ne réinventez pas la roue.<br />
D’une part pour tout ce qui touche au parsing XML utilisez des frameworks éprouvés et testés par les communautés Open Source par exemple. En réécrivant un parseur XML vous prenez le risque de ne pas penser à tous les types d’attaques présentés précédemment et bien entendus à tous ceux qui ne sont pas exposés ici.<br />
Les frameworks existants sont testés par de nombreux utilisateurs, dont certain très avertis vont remonter ce type de problèmes qui seront très vite corrigés.<br />
Il en va de même pour votre framework de WebService. Utilisez un framework éprouvé et ne réinventer pas la roue en branchant votre parseur XML maison à une socket en écoute sur le port 80. Je caricature mais parfois on croise des choses terrifiantes … Et bien entendu <b>validez tout ce que votre application recevra via des messages SOAP</b>.</p>
<p>Enfin mettez à jour vos frameworks. Les mises à jours de ceux ci (même mineures) incluent souvent des correctifs au failles de sécurités mises en évidences.<br />
Bref à retenir : utilisez des frameworks de parsing XML et de Web Services modernes et éprouvés par la communauté.</p>
<h1>Côté réseau et hardware : HTTP, HTTPS, VPN, filtrage IP, filtrage hardware</h1>
<p>Une question qui m’est souvent remontée est :  quelle type de transport utiliser pour exposer mes Web Services ?</p>
<p>Déjà je tiens à briser un a priori souvent entendu : exposer vos services sur le web en <strong>HTTPS ne vous prémunit pas de tous les risques</strong>.<br />
Au mieux vous vous protéger des attaques du type man in the middle (et donc qu’un utilisateur intercepte vos messages), mais toutes les autres attaques restent possible.<br />
Il est néanmoins important de savoir que SSL peut, comme un VPN, assurer l&#8217;authentification de l&#8217;utilisateur si le serveur est correctement configuré.<br />
Cependant, par défaut les canaux cryptés n’ont qu’un seul intérêt : garantir la confidentialité de l’échange. C’est à dire qu’un utilisateur en écoute sur vos échanges ne pourra pas les intercepter (confidentialité de l&#8217;échange).<br />
C’est donc très important mais très souvent insuffisant.<br />
Il est toutefois possible de mettre en place une authentification HTTP Basic ou WS Basic devant un WebService via une configuration spécifique du serveur. Néanmoins ces méthodes d&#8217;authentification sont peu fiable car le mot de passe circule en clair il est donc interceptable.  Donc ces types d&#8217;authentification restent tout à fait valables si elles sont utilisées sur un canal crypté.</p>
<p>Les tunnels de type VPN  sont déjà un cran au dessus car ils assurent l’authentification de l&#8217;appelant (souvent grâce à un certificat) via l’accès VPN. Cela vous protège aussi des écoutes malveillantes car les tunnels VPN sont cryptés. Cela vous apporte, en plus, une limitation sur les utilisateurs qui se connectent à vos services car seuls ceux que vous autorisez explicitement peuvent utiliser le canal VPN. Le canal VPN est donc une très bonne solution mais pas toujours applicable.</p>
<p>Le filtrage d’IP est une protection intéressante pour limiter les appelants de vos services, néanmoins il est relativement facile de masquer son adresse IP par une autre (<a href="http://fr.wikipedia.org/wiki/Spoofing">spoofing</a> d’adresse IP). C’est donc un levier de sécurité intéressant mais insuffisant à lui tout seul.<br />
La mise en place de signature numérique sur les messages permet alors de valider la non répudiation de ceux-ci.</p>
<p>A noter qu&#8217;il existe aussi des solutions matérielles type <i>Datapower</i> pour gérer la sécurité de vos services selon les possibilités et la configuration du matériel choisi. Ces solutions sont particulièrement efficaces mais très couteuses. Dans un degrés de risque élevé elles sont toutefois justifiées.  Ces solutions ont aussi l&#8217;avantage d&#8217;être particulièrement efficace pour accélérer la gestion du SSL,  gérer l&#8217;authentification et les autorisations ainsi que la validation des données des flux. </p>
<h1>GDIA : Gestion des identités et des accès.</h1>
<p>On en revient finalement toujours au même, lorsque des données et services sont sensibles il est donc nécessaire de les protéger par deux mécanismes classiques : <strong>l’authentification et l’autorisation</strong>.<br />
Néanmoins ce n’est pas toujours évident à mettre en place sur un Web Service, on ne peut pas simplement mettre un formulaire devant comme sur un site web.</p>
<p>SOAP dans sa souplesse, découpe ses messages en deux parties : un <strong>header</strong> et un <strong>body</strong>.<br />
Le <strong>body</strong> est normalement prévu pour ne contenir que des <strong>notions orientées métier</strong>. Le <strong>header</strong> quand à lui est là pour recevoir toutes les <strong>notions techniques</strong> nécessaires au web service.<br />
C’est donc lui que nous allons utiliser pour contenir les informations d’authentification et d’autorisation.<br />
Les protocoles de sécurité de Web Service tel que <strong>WS Sécurity</strong> et ses consorts se basent tous sur ce header soap.</p>
<p>De manière un peu généraliste, une bonne pratique est de mettre en place un web service d’authentification. Celui lui ne sera pas filtré car il faut bien qu’il soit appelable la première fois. Il fournira des données de sécurité  (comme un jeton unique à durée de vie limitée par exemple) à l’utilisateur qui se sera authentifié via une webmethod prévue à cet effet. L’utilisateur devra ensuite fournir (dans les header soap pour ne pas mélanger les notions techniques et métiers dans le message) son login et son mot de passe ou mieux, ce jeton de sécurité pour chaque appel à vos services métiers.<br />
Côté WebService, un intercepteur devra valider ces données avant de permettre ou rejeter l’appel au service métier.<br />
Cette bonne pratique est de manière très macroscopique le fonctionnement proposé par des protocoles tels que WS Security.</p>
<p>Concernant les mécanismes de gestion des autorisations, nous ne nous étendrons pas sur le sujet car cela peut être soit très simple (read/write ou user/admin) soit très complexe et nécessiter un article complet rien que sur le sujet. On peut toutefois facilement imaginer un intercepteur branché après l&#8217;authentification pour vérifier les droits de l&#8217;appelant.<br />
Il est bon aussi de savoir qu&#8217;un protocole comme OAuth est tout à fait adapté pour gérer les autorisations d&#8217;accès à un WebService, d&#8217;autant qu&#8217;il est fortement compatible avec les services de type Rest qui sont orientés ressources.</p>
<h1>Conclusion</h1>
<p>Pour conclure il ne faut jamais oublier qu’un <strong>WebService</strong> est une <strong>porte d’entrée</strong> vers votre application. Le sécuriser est donc important.<br />
La majorité des <strong>failles</strong> présentés dans cet article à titre informatif sont <strong>couvertes par les frameworks de WebService</strong> modernes (Pour java : CXF, Métro, JBossWS &#8230;.).<br />
Néanmoins il est important de <strong>s’assurer de l’identité et des droits de l’appelant</strong> avant de le laisser appeler vos méthodes métiers.<br />
Enfin le <b>cryptage</b> du canal d’échange, quelque soit le moyen, est un très bon levier de sécurité mais comme nous l’avons vu il ne mitige qu&#8217;une partie des risques.<br />
La mise en place de <b>signature numérique </b> est aussi un élément aujourd&#8217;hui très fiable pour valider la non répudiation de vos messages.<br />
Dans bien des cas, comme dit en introduction, une basic authentification HTTP sur un canal HTTPS s&#8217;avèrera suffisant et plus justifié que la mise en place d&#8217;outils évolués et relativement complexes à mettre en place tels que WS Security. Il faut donc bien mesurer le besoin et le confronter au risque avant de décider quel niveau de sécurité engager.<br />
Toutefois n&#8217;oubliez pas que la notion la plus importante est toujours la <b>validation des données</b> envoyés par vos utilisateurs !</p>
<p>Dans un prochain article je vous présenterais les notions apportées par des protocoles de sécurité de web services tels que WS Security, XML Signature ou XML Encryption.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=22840" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/securite-des-services-web-1ere-partie/' rel='bookmark' title='Sécurité des services web – 1ère partie'>Sécurité des services web – 1ère partie</a></li>
<li><a href='http://blog.octo.com/html5-offline-et-securite/' rel='bookmark' title='HTML5, offline et sécurité'>HTML5, offline et sécurité</a></li>
<li><a href='http://blog.octo.com/gwt-et-securite-se-premunir-des-csrf/' rel='bookmark' title='GWT et sécurité, se prémunir des CSRF'>GWT et sécurité, se prémunir des CSRF</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/initiation-a-la-securite-des-web-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sécurité des services web – 1ère partie</title>
		<link>http://blog.octo.com/securite-des-services-web-1ere-partie/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=securite-des-services-web-1ere-partie</link>
		<comments>http://blog.octo.com/securite-des-services-web-1ere-partie/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 17:00:07 +0000</pubDate>
		<dc:creator>Xavier Vaccari</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[web-services]]></category>

		<guid isPermaLink="false">http://new-blog.octo.com/2008/12/04/securite-des-services-web-1ere-partie/</guid>
		<description><![CDATA[<p>Cet article est la première partie d'une série de posts concernant la sécurité des services web.</p> <p>Nous allons présenter dans cette première partie un aperçu de la norme WS-Security pour les services SOAP et les différentes possibilités pour sécuriser des services web.</p>
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/initiation-a-la-securite-des-web-services/' rel='bookmark' title='Initiation à la sécurité des Web Services'>Initiation à la sécurité des Web Services</a></li>
<li><a href='http://blog.octo.com/refactoring-net-avec-uml-1ere-partie/' rel='bookmark' title='Refactoring .NET avec UML, 1ère partie'>Refactoring .NET avec UML, 1ère partie</a></li>
<li><a href='http://blog.octo.com/problemes-courants-imprecision-des-calculs-mathematiques-1ere-partie/' rel='bookmark' title='Problèmes courants: Imprécision des calculs mathématiques (1ère partie)'>Problèmes courants: Imprécision des calculs mathématiques (1ère partie)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fsecurite-des-services-web-1ere-partie%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22S%C3%A9curit%C3%A9%20des%20services%20web%20%E2%80%93%201%C3%A8re%20partie%22%20%7D);"></div>
<p>Cet article est la première partie d&#8217;une série de posts concernant la sécurité des services web.</p>
<p>Nous allons présenter dans cette première partie un aperçu de la norme WS-Security pour les services SOAP et les différentes possibilités pour sécuriser des services web.</p>
<p><span id="more-170"></span></p>
<p>Les architectures SOA se sont généralisées petit à petit au sein des entreprises pour construire des systèmes capables d&#8217;offrir des fonctionnalités partagées via des services.</p>
<p>Ces services peuvent être internes et ne concerner qu&#8217;une organisation ou être ouverts sur l&#8217;extérieur dans le cadre d&#8217;échanges B2B.</p>
<p>Dès lors que l&#8217;on propose de la valeur ajoutée ou transporte des données dites sensibles, ces services sont alors confrontés à des buts contradictoires :</p>
<ul>
<li>Exposer de l&#8217;information et la rendre facilement accessible à un tiers (personne ou système)</li>
<li>Sécuriser l&#8217;information pour la rendre uniquement consommable par des personnes ou des systèmes habilités à la voir et à l&#8217;utiliser.</li>
</ul>
<p>La sécurité est au cœur des préoccupations des entreprises pour garantir la cohérence et la pérennité des systèmes. Pour ce faire, la sécurité doit être prise en compte dès la conception des services web et ceci à tous les niveaux :</p>
<ul>
<li>Conception, spécification</li>
<li>Architecture</li>
<li>Développement</li>
<li>Déploiement</li>
<li>Exécution &amp; exploitation</li>
</ul>
<p>Au-delà du tout sécuritaire, une approche pragmatique de la sécurité pilotée par les risques est préférable. Rappelons les fonctions de sécurité disponibles qui pourront s&#8217;appliquer à des services:</p>
<ul>
<li><strong>Authentification</strong> : le mécanisme qui permet de vérifier l&#8217;identité d&#8217;une personne/d&#8217;un système</li>
<li><strong>Habilitation</strong> : le droit d&#8217;accéder ou non à une fonctionnalité, à une donnée</li>
<li><strong>Intégrité</strong> (ou signature) : la non modification d&#8217;une donnée échangée</li>
<li><strong>Imputabilité</strong> : traçabilité des actions d&#8217;un individu sur un système</li>
<li><strong>Confidentialité</strong> (ou chiffrement) : la non lisibilité de la donnée par un tiers ne partageant pas un secret</li>
</ul>
<p>Les stacks de sécurité des web services (WS-Security &amp; co) sont à priori complexes et chers à mettre en œuvre. Toutefois, on peut trouver des exemples concrets où ces solutions ont un réel intérêt (signature des messages par exemple).</p>
<p>Nous allons présenter dans cet article un aperçu de la norme WS-Security pour les services SOAP et les différentes possibilités pour sécuriser des services web.</p>
<h3>WS-Security</h3>
<p>WS-Security est un standard pour sécuriser des services web SOAP uniquement. Ce dernier aborde les aspects classiques comme l&#8217;authentification, l&#8217;habilitation mais également des besoins plus rares comme le chiffrement, la signature. Cette norme s&#8217;applique uniquement au niveau des messages échangés et n&#8217;a aucun impact sur le protocole et le transport choisis. Il repose sur l&#8217;ajout d&#8217;éléments dans les headers/en-têtes SOAP. Ce standard appelé aussi WSS (Web Services Security) tente de normaliser les échanges sécurisés de messages et de garantir l&#8217;interopérabilité entre systèmes.</p>
<p>Des Profiles sont disponibles pour couvrir l&#8217;ensemble des problématiques liées à la sécurité (authentification, chiffrement et signature). Le consortium OASIS vise la standardisation des spécifications WS-* pour permettre une meilleure interopérabilité entre les technologies.</p>
<h4>Authentification</h4>
<p>L&#8217;authentification s&#8217;appuie sur la notion de token c&#8217;est à dire des headers SOAP capables de véhiculer les credentials (typiquement un login et un mot de passe) jusqu&#8217;au service cible. Le niveau de confidentialité de ces données échangées peut également être choisi (hash de password, chiffrement des données,.).</p>
<p>Les principaux tokens disponibles sont :</p>
<ul>
<li><strong>User Name Token</strong> : échange de couples login/mot de passe</li>
<li><strong>SAML Token</strong> : échange de données d&#8217;authentification au format XML SAML</li>
<li><strong>X509 Token</strong> : échange de données d&#8217;authentification par certificat (authentification forte)</li>
</ul>
<p>D&#8217;autres tokens permettent de l&#8217;authentification via des systèmes tiers comme Kerberos.</p>
<p>Voici un exemple de header avec un token user name non chiffré :</p>

<div class="wp_codebox"><table><tr id="p1705"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p170code5"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Envelope <span style="color: #000066;">xmlns:S11</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:wsse</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:wsu</span>= <span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Header <span style="color: #000000; font-weight: bold;">&gt;</span></span>
...
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :Security<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :UsernameToken<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :Username<span style="color: #000000; font-weight: bold;">&gt;</span></span>NNK<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :Password <span style="color: #000066;">Type</span>=<span style="color: #ff0000;">&quot;...#PasswordDigest&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :Nonce<span style="color: #000000; font-weight: bold;">&gt;</span></span>WScqanjCEAC4mQoBE07sAQ==<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;">&lt; wsu:Created<span style="color: #000000; font-weight: bold;">&gt;</span></span>2003-07-16T01:24:32Z<span style="color: #009900;">&lt; /wsu:Created<span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
&nbsp;
...
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
...</pre></td></tr></table></div>

<h4>Chiffrement</h4>
<p>Le chiffrement peut se faire via différents algorithmes, symétriques ou asymétriques. La norme WS-Security permet l&#8217;envoi de métadonnées du client de web service au web service cible (end-point) afin de décrire la méthode de chiffrement utilisée et permettre des échanges de clé si besoin.</p>
<p>Les messages sont constitués de plusieurs parties (header, message), chacune pouvant être chiffrée ou non selon la configuration choisie.</p>
<p>Voici un exemple de chiffrement du corps du message avec un certificat X509 :</p>

<div class="wp_codebox"><table><tr id="p1706"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p170code6"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Envelope <span style="color: #000066;">xmlns:S11</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:wsse</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:wsu</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:ds</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:xenc</span>=<span style="color: #ff0000;">&quot;...&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Header<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :Security<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :ReferenceList<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :DataReference <span style="color: #000066;">URI</span>=<span style="color: #ff0000;">&quot;#bodyID&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Body<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :EncryptedData <span style="color: #000066;">Id</span>=<span style="color: #ff0000;">&quot;bodyID&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ds</span> :KeyInfo<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ds<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;ds</span> :KeyName<span style="color: #000000; font-weight: bold;">&gt;</span></span>CN=Hiroshi Maruyama, C=JP<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ds<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :CipherData<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :CipherValue<span style="color: #000000; font-weight: bold;">&gt;</span></span>...//le message chiffré// <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Ainsi, plutôt que d&#8217;utiliser une couche de transport gérant la confidentialité des données, on chiffre tout ou partie du message.</p>
<h4>Signature</h4>
<p>L&#8217;objectif de la signature est de garantir l&#8217;origine du message en échangeant un jeton chiffré avec un secret partagé (clé symétrique ou asymétrique). Elle se  se fait via des certificats X509 et peut être appliquée sur des messages en clair ou chiffrés selon la configuration choisie.</p>
<p>Comme pour le chiffrement, il est possible de signer à la fois le corps des messages mais également leurs en-têtes.</p>
<p>Voici un exemple de header WS-Security avec une signature du corps du message à base de certificat X509 :</p>

<div class="wp_codebox"><table><tr id="p1707"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p170code7"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Envelope <span style="color: #000066;">xmlns:S11</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:wsse</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:wsu</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:ds</span>=<span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">xmlns:xenc</span>=<span style="color: #ff0000;">&quot;...&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Header<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wsse</span> :Security<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :ReferenceList<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :DataReference <span style="color: #000066;">URI</span>=<span style="color: #ff0000;">&quot;#bodyID&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wsse<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s11</span> :Body<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :EncryptedData <span style="color: #000066;">Id</span>=<span style="color: #ff0000;">&quot;bodyID&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ds</span> :KeyInfo<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ds<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;ds</span> :KeyName<span style="color: #000000; font-weight: bold;">&gt;</span></span>CN=Hiroshi Maruyama, C=JP<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ds<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :CipherData<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;xenc</span> :CipherValue<span style="color: #000000; font-weight: bold;">&gt;</span></span>...//le message chiffré// <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xenc<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s11<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<h3>WS-Security : une norme de plus en plus accessible</h3>
<p>La norme WS-Security est vaste mais la complexité inhérente à la norme est de plus en plus masquée et devient même dans certains cas complètement externe aux développements applicatifs.</p>
<p>En Java par exemple, l&#8217;adoption de nouveaux frameworks et leur intégration avec Spring a favorisé la mise en place de WS-Security par simple déclaration au niveau de la configuration Spring. Un service SOAP peut donc intégrer un chiffrement ou une signature par simple ajout d&#8217;un bloc XML.</p>
<p>Des constructeurs d&#8217;appliances comme IBM vont également dans ce sens en proposant des boitiers dédiés à la sécurité des web services. Ces derniers sont capables de modifier à la volée des messages SOAP pour leur appliquer des fonctions de sécurité.</p>
<h3>Où placer la sécurité ? Jusqu&#8217;où aller ?</h3>
<p>Les fonctionnalités d&#8217;un système n&#8217;étant pas exposées aux mêmes risques et cela de façon uniforme, l&#8217;approche sécuritaire pilotée par les risques permet d&#8217;ajuster le niveau de combinaison et donc d&#8217;ajuster les coûts et délais induits lors de la mise en œuvre/exploitation.</p>
<p>Généralement, la plupart des services web implémentés dans les entreprises n&#8217;embarquent pas de brique sécurité à proprement parler et les organisations ont plutôt tendance à s&#8217;appuyer, dans la plupart des cas, sur les procédures et matériels existants pour la gérer au niveau de l&#8217;infrastructure. Cette démarche a l&#8217;avantage de ne pas ou peu impacter les développements applicatifs.</p>
<p>La mise en place de tout ou partie des 5 fonctions citées précédemment doit être étudiée selon le besoin de chaque contexte. Il sera ainsi possible de trouver le meilleur compromis pour mitiger les risques en combinant ces fonctions. Voici quelques exemples de combinaisons possibles :</p>
<ul>
<li><strong>Contrôle d&#8217;accès aux services</strong> : utiliser un réseau sécurisé par des firewalls pour limiter la consommation de services à telle ou telle machine.</li>
<li><strong>Confidentialité des données échangées over HTTP</strong> : HTTPS pour le transport des données</li>
<li><strong>Confidentialité et intégrité pour des messages XML over HTTP</strong>: HTTPS pour le transport, signature personnalisée ajoutée dans le message XML</li>
<li><strong>Confidentialité et intégrité pour des messages SOAP</strong> : HTTPS pour le transport, signature du message avec WS-Security</li>
<li>.</li>
</ul>
<p>Le déploiement de la sécurité autour des services web va être principalement guidé par les contraintes de mise en œuvre (légale ou réglementaire de non répudiation, de confidentialité des données), le besoin en terme de confidentialité des données et la topologie des équipes infra, sécurité et projet au sein de l&#8217;entreprise :</p>
<ul>
<li>Le niveau de maitrise par les équipes de développement des frameworks et outils (IDE, stack SOAP ou REST, intégration sur les serveurs de développement),</li>
<li>Le niveau de maitrise par les équipes de production des briques d&#8217;infrastructure et éventuellement des frameworks utilisés sur les projets (firewalls, reverse-proxy, appliance XML, PKI/Certificats.),</li>
<li>La facilité de communication entre ces équipes est donc nécessaire pour mettre en production des services sécurisés et fluidifier les échanges,</li>
<li>Les besoins d&#8217;interopérabilité entre les systèmes exposant ou consommant des services sécurisés.</li>
</ul>
<p><img src="/wp-content/uploads/images/soa/secu-communication-equipes.png" alt="" /></p>
<p>Voici quelques exemples de combinaisons que nos architectes retrouvent souvent chez des clients.</p>
<h4>Utiliser la sécurité des infrastructures</h4>
<p><img src="/wp-content/uploads/images/soa/securite-infra.png" alt="" /></p>
<ul>
<li>Réseaux séparés ou de confiance (firewalls)</li>
<li>(optionnel) VPN pour la confidentialité sur l&#8217;extranet/internet</li>
<li>(optionnel) Authentification éventuellement déléguée à un VPN</li>
</ul>
<p>Dans ce cas, la sécurisation repose intégralement sur les briques réseau. Elle n&#8217;impacte pas les équipes de développement ce qui rend la sécurité complètement transverse à l&#8217;application. Ce cas d&#8217;utilisation s&#8217;applique dans des échanges B2B avec des partenaires (réseau VPN dédié entre le producteur et le consommateur de services) ou dans les intranets.</p>
<h4>S&#8217;appuyer sur les protocoles standards</h4>
<p><img src="/wp-content/uploads/images/soa/securite-protocole.png" alt="" /></p>
<ul>
<li>HTTP pour le protocole</li>
<li>SSL pour la confidentialité</li>
<li>Basic Auth pour l&#8217;authentification (user, mot de passe) (granularité au niveau de l&#8217;application)</li>
</ul>
<p>Ces briques sont communes et maitrisées par l&#8217;ensemble des technologies utilisées dans les entreprises (Java, .Net, C/C++, Progiciels, .). Le pattern repose entièrement sur le protocole (HTTP+SSL) et permet d&#8217;assurer à la fois l&#8217;authentification et la confidentialité (les messages transite en clair dans un tuyau crypté HTTPS).</p>
<p>Cette typologie est la plus répandue aujourd&#8217;hui. On peut l&#8217;utiliser à la fois pour des échanges internes à l&#8217;entreprise pour des services sensibles que pour relations B2B classiques utilisant l&#8217;Internet (ex: banque qui fait de l&#8217;assurance vie en marque blanche). Ce mode de sécurisation est flexible puisque l&#8217;accueil de nouveaux clients ne nécessite aucune modification de configuration existante (pas de réseau à créer contrairement à la précédente).</p>
<h5>S&#8217;appuyer sur les couches applicatives et des normes telles que WS-Security</h5>
<p><img src="/wp-content/uploads/images/soa/securite-couches-applicatives.png" alt="" /></p>
<ul>
<li>HTTP (synchrone) ou JMS (asynchrone) pour le protocole</li>
<li>Authentification par Username Token en WS-Security</li>
<li>Chiffrement des messages via WS-Security</li>
</ul>
<p>Cette solution est plus complexe à mettre en œuvre puisqu&#8217;elle impacte les couches applicatives et nécessite que les messages soient échangés en SOAP.</p>
<p>En revanche, l&#8217;application de la sécurité au niveau du message permet sa circulation sur un transport non sécurisé (http sur Internet par exemple) et une interopérabilité accrue.</p>
<p>Cette solution est intéressante dans le cas de services très ouverts sur Internet qui doivent garantir un fort niveau de confidentialité/intégrité du message.</p>
<p><strong>La suite de cette série d&#8217;articles illustrera quelques uns de ces cas d&#8217;application.</strong></p>
<h3>Références</h3>
<ul>
<li>Octo Livre Blanc <a hreflang="fr" href="http://www.octo.com/Services-Web--Choix-Architecturaux.8/Publications">« Services Web : Choix Architecturaux »</a></li>
<li>Octo <a hreflang="fr" href="http://www.octo.com/com/com_gdi.html" class="broken_link">« Gestion des identités »</a></li>
<li><a hreflang="fr" href="http://74.125.77.132/search?q=cache:tDchHKAzrugJ:www.oasis-open.org/committees/download.php/16782/wss-v1.1-spec-os-UsernameTokenProfile.pdf&amp;hl=en&amp;ct=clnk&amp;cd=2&amp;gl=us&amp;client=firefox-a" class="broken_link">OASIS User Name Token Profile</a></li>
<li><a hreflang="fr" href="http://www.oasis-open.org/committees/download.php/16790/wss-v1.1-spec-os-SOAPMessageSecurity.pdf">Spécification WS-Security</a></li>
<li><a hreflang="fr" href="http://fr.wikipedia.org/wiki/Security_Assertion_Markup_Language">Définition SAML</a></li>
</ul>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=170" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/initiation-a-la-securite-des-web-services/' rel='bookmark' title='Initiation à la sécurité des Web Services'>Initiation à la sécurité des Web Services</a></li>
<li><a href='http://blog.octo.com/refactoring-net-avec-uml-1ere-partie/' rel='bookmark' title='Refactoring .NET avec UML, 1ère partie'>Refactoring .NET avec UML, 1ère partie</a></li>
<li><a href='http://blog.octo.com/problemes-courants-imprecision-des-calculs-mathematiques-1ere-partie/' rel='bookmark' title='Problèmes courants: Imprécision des calculs mathématiques (1ère partie)'>Problèmes courants: Imprécision des calculs mathématiques (1ère partie)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/securite-des-services-web-1ere-partie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cahier OCTO &#171;&#160;Services Web : Choix Architecturaux&#160;&#187;</title>
		<link>http://blog.octo.com/cahier-octo-services-web-choix-architecturaux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cahier-octo-services-web-choix-architecturaux</link>
		<comments>http://blog.octo.com/cahier-octo-services-web-choix-architecturaux/#comments</comments>
		<pubDate>Tue, 10 Apr 2007 07:57:46 +0000</pubDate>
		<dc:creator>Nelly Grellier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[web-services]]></category>

		<guid isPermaLink="false">http://new-blog.octo.com/2007/04/10/cahier-octo-services-web-choix-architecturaux/</guid>
		<description><![CDATA[Vous concevez une architecture distribuée en utilisant des services Web ? Bien ! Mais vous êtes-vous posé la question du style architectural, c&#8217;est-à-dire du choix entre une approche orientée appel de procédure à distance ou une approche orientée manipulation de ressources ? Et celle du choix entre une pile de protocoles lourde ou une pile [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/versioning-des-services-principes-et-elements-darchitecture%e2%80%a6/' rel='bookmark' title='Versioning des services: principes et éléments d&#8217;architecture…'>Versioning des services: principes et éléments d&#8217;architecture…</a></li>
<li><a href='http://blog.octo.com/versioning-de-services-rest/' rel='bookmark' title='Versioning de services REST'>Versioning de services REST</a></li>
<li><a href='http://blog.octo.com/les-publications-octo/' rel='bookmark' title='Les Publications OCTO'>Les Publications OCTO</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fcahier-octo-services-web-choix-architecturaux%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Cahier%20OCTO%20%5C%22Services%20Web%20%3A%20Choix%20Architecturaux%5C%22%22%20%7D);"></div>
<p><a href="http://www.octo.com/com/com_livreblanc.html" class="broken_link"><img width="150" vspace="5" hspace="5" height="194" border="0" align="right" alt="Les cahiers d'OCTO Technology - Services Web : Choix Architecturaux" src="/wp-content/uploads/images/cahier_services_web.gif" /></a>Vous concevez une architecture distribuée en utilisant des services Web ?</p>
<p>Bien ! Mais vous êtes-vous posé la question du style architectural, c&#8217;est-à-dire du choix entre une approche orientée appel de procédure à distance ou une approche orientée manipulation de ressources ? </p>
<p>Et celle du choix entre une pile de protocoles lourde ou une pile légère pour les échanges avec les services Web ? Vos décisions auront un impact important sur les propriétés de votre système : complexité, facilité d&#8217;évolution, obsolescence technique, capacité à monter en charge, stabilité, ouverture. </p>
<p>Nous proposons ici un tour d&#8217;horizon des grandes options architecturales&#8230; et quelques précieux conseils&#8230;</p>
<p>Téléchargez la suite sur <a href="http://www.octo.com/com/com_livreblanc.html" class="broken_link">www.octo.com</a></p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=22" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/versioning-des-services-principes-et-elements-darchitecture%e2%80%a6/' rel='bookmark' title='Versioning des services: principes et éléments d&#8217;architecture…'>Versioning des services: principes et éléments d&#8217;architecture…</a></li>
<li><a href='http://blog.octo.com/versioning-de-services-rest/' rel='bookmark' title='Versioning de services REST'>Versioning de services REST</a></li>
<li><a href='http://blog.octo.com/les-publications-octo/' rel='bookmark' title='Les Publications OCTO'>Les Publications OCTO</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/cahier-octo-services-web-choix-architecturaux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

