Vous êtes sur la page 1sur 35

Scurisation de web service

Tuteur : Christophe TURBOUT

Auteur : Gatan TURCAS


Anne universitaire : 2012-2013

Scurisation de web service

2012/2013

Remerciements
Je tiens remercier monsieur Christophe TURBOUT de m'avoir accompagn tout au long
de ce projet, en effet grce lui j'ai pu dvelopper ce projet dans le bon sens, en
tablissant une liste dtapes franchir afin de le mener bien.
Enfin, je remercie lquipe des enseignants toujours prsente pour rpondre toutes
mes questions.

Gatan TURCAS

Scurisation de web service

2012/2013

Sommaire
1. Web service ........................................................................................ 5
1.1. Qu'est-ce quun Web service? ................................................................................... 5
1.1.1. Fonctionnement ........................................................................................................................... 5
1.1.2. Avantages ........................................................................................................................................ 6
1.1.3. Inconvnients................................................................................................................................ 6

2. WSO2 Framework for PHP ............................................................ 7


2.1. Fonctionnent ..................................................................................................................... 7
2.2. Composition du web service Framework PHP ................................................. 8
2.3. Utilisations et utilisateurs ........................................................................................ 10

3. Les objectifs..................................................................................... 13
3.1. Installation ...................................................................................................................... 13
3.1.1. Problmes rencontrs............................................................................................................ 14

3.2. Tests de la plate-forme .............................................................................................. 15


3.2.1. Mon premier service............................................................................................................... 16
3.2.2. Tests de scurit ....................................................................................................................... 18
3.2.3. Fonctionnement des certificats ......................................................................................... 19
3.2.4. Test 1 aucune scurit ........................................................................................................... 22
3.2.5. Test 2 Authentifications ........................................................................................................ 22
3.2.6. Test 3 Chiffrements ................................................................................................................. 23
3.2.7. Test 4 Signatures avec les certificats .............................................................................. 24
3.2.8. Test 5 Temps de validit d'un message ......................................................................... 25
3.2.9. Problmes rencontrs............................................................................................................ 25

3.3. Mise jour de scurit de la plate-forme ......................................................... 27


3.4. Intgrer du CDATA ...................................................................................................... 27
3.5. Conclusion des quatre objectifs ............................................................................ 29

4. Droulement du projet ................................................................ 29


5. Conclusion ....................................................................................... 31
6. Glossaire .......................................................................................... 32
7. Bibliographie .................................................................................. 33
8. Annexe .............................................................................................. 34
Gatan TURCAS

Scurisation de web service

2012/2013

Introduction
Aujourdhui, linformatique joue un rle essentiel aussi bien pour les professionnels que
pour les particuliers. En effet, les systmes informatiques sont dsormais au cur de
toutes les fonctions de lentreprise et plus gnralement dans la vie quotidienne. tant
ainsi trs utilis, il y la ncessit de les optimiser.
Pour cela, il existe des outils appels Web Service. Ceux-ci sont trs utiliss dans le
domaine des entreprises pour garantir un fonctionnement permanent des services.
Ainsi, ce projet portera essentiellement sur ltude et lanalyse d'une solution de web
service "WSO Web Service Framework for PHP". Le projet se situe donc dans une
thmatique de test et d'amlioration de la scurit : Comment installer tester et
amliorer la plateforme WSO ? .
Pour rpondre cette problmatique, je vais dans un premier temps vous expliquer ce
quest un Web service , comment il fonctionne et opre. Dans un deuxime temps, je
montrerai la ralisation des diffrents objectifs, comprenant l'installation, tests de la
scurit, mise jour de scurit puis l'intgration de CDATA. Enfin nous tirerons une
conclusion.

Gatan TURCAS

Scurisation de web service

2012/2013

1. Web service
Avec la connexion des ordinateurs en rseau sur internet, il est possible de faire
fonctionner des applications sur des serveurs distants. L'intrt d'une application
fonctionnant distance est de permettre notamment :

De centraliser les donnes uniquement sur un serveur distant


Le serveur est gnralement physiquement plus puissant (puissance de calcul, de
stockage) que les ordinateurs des clients.
Le service centralis peut tre utilis simultanment par un grand nombre
dutilisateurs.
L'application distante peut tre utilise simultanment par un grand nombre
d'utilisateurs et sa mise jour n'intervient qu' un seul endroit.

Les Web Services sont une solution dfinissant un standard de communication avec des
applications distantes et d'en rcuprer les rsultats travers internet.

1.1. Qu'est-ce quun Web service?


Un service web, ou web service, est un programme de communication entre
applications distantes travers internet ou intranet. Le concept est indpendant de tout
langage de programmation. La notion darchitecture de service a t dfinie sur le
modle SOA. SOA (Service Oriented Architecture) est un modle d'architecture
permettant lintgration des divers systmes dinformation de lentreprise qui considre
chaque ressource informatique comme un service.

1.1.1. Fonctionnement
Un ou plusieurs clients d'environnement diffrents comme client Java, PHP vont envoyer
une requte un ou des services situs dans un autre lieu. Le service va traiter et
interprter la demande et renvoyer une rponse au client. Le service est interconnect
des basses de donnes.

Pour communiquer, il utilise le protocole HTTP comme moyen de transport.


Les requtes changes entre clients et services utilisent le protocole SOAP (Simple
Object Access Protocol) ou REST (Representational State Transfer). Ces requtes sont
dans un format XML, elles sont envoyes du client au service. Le service interprte les

Gatan TURCAS

Scurisation de web service

2012/2013

balises XML, puis traite et calcul le message du client. Le service finit par envoyer une
rponse de type SOAP ou REST au client.

1.1.2. Avantages
L'avantage d'utiliser une architecture web Service est de centraliser la puissance de
calculs dans un serveur ddi aux calculs et reli directement la base de donnes. Les
clients qui peuvent tre nombreux sont donc allgs de la puissance de calcul. Cet
avantage permet donc de diminuer les couts. Si la puissance de calcul avait t rpartie
sur tous les clients, le cout aurait t beaucoup plus lev (multiplication des serveurs
physiques puissants, multiplication des bases de donnes...).
Un autre avantage est la maintenance informatique, le fait de centraliser les services
facilite la gestion base de donnes services, serveur web.

1.1.3. Inconvnients
Si le web service n'est pas scuris, il y a potentiellement une faille de scurit avec une
attaque de type l'homme du milieu "man in the middle " entre client et service, o les
changes de donnes peuvent tre interceptes et modifies en usurpant l'identit d'un
client ou d'un service. Heureusement, il existe des parades pour viter ce type d'attaque
avec des certificats d'authenticits. Nous verrons plus en dtails la scurit du web
service.

Gatan TURCAS

Scurisation de web service

2012/2013

2. WSO2 Framework for PHP


WSO2 est une solution de web service open source, disponible en plusieurs langages de
programmation par exemple en C, PHP. Il est destin aux dveloppeurs et aux
professionnels.
La solution de web service est un middleware, il se place entre les clients et services. Elle
permet linteroprabilit des diffrents langages de programmation (.net, java, PHP...).
La version tudie pour le projet annuel est WSO2 Framework for PHP.
Un API est disponible sur le site officiel WSO.com afin de connatre les diffrentes classes
et options qui soffrent l'utilisateur. Notamment les paramtres de scurits, que j'ai
utilis et analys dans le projet.
WSO2 est disponible sous diffrents types de format chacun ayant des utilisations
diffrentes.

2.1. Fonctionnent

Source : http://wso.com
Un client ou des clients (partie de gauche) de diffrents environnements (java, .net, c++,
navigateur internet) veulent accder diffrents serveurs d'applications contenant des
services (partie de droite). WSO le serveur de web service qui est un middleware, se
situe donc au milieu. Il permet de contrler les actions et requtes de clients vers
services. Le Framework en PHP permet d'interprter la configuration dans le code des
clients et services afin d'appliquer des actions.
La base de donnes peut tre relie au web service afin de la rendre accessible depuis
les clients ou serveurs d'applications. La puissance de calcul ncessaire est centralise

Gatan TURCAS

Scurisation de web service

2012/2013

au niveau des serveurs dapplications. La puissance physique des clients peut tre ainsi
rduite, car elle neffectue pas de calcul.

2.2. Composition du web service Framework PHP


Le Web service dfini dans ce projet repose sur plusieurs couches pour fonctionner.

Source : http://wso2.com
Le cur du web service repose sur le serveur Web Apache avec le module Axis2/c. Le
cur est crit en C (Web service Framework for C) permettant le fonctionnement et la
configuration de la plate-forme. La communication se fait avec le langage XML, et les
protocoles SOAP et REST.

XML (Extensible Markup Language) : langage de programmation avec balises


extensibles (cration de ses propres noms pour les balises).

SOAP (Simple Object Access Protocol) : Transmit ion des messages avec le protocole
SOAP en HTTP (Hypertext Transfer Protocol), et HTTPS (Hypertext Transfer
Protocol Secure). L'intrt de SOAP est qu'il permet d'autoriser un objet invoquer
des mthodes d'objets physiquement situs sur un autre serveur.

REST (Representational State Transfer) : est un style darchitecture de web service


bas sur les URL (Uniform Resource Locator). Il se base sur HTTP pour la

Gatan TURCAS

Scurisation de web service

2012/2013

transmission de messages entre clients et services. Cependant, il ne rajoute pas de


nouvelle couche d'abstraction au-dessus du protocole contrairement SOAP.

Binary Attachments with MTOM (Message Transmission Optimization Mechanism) :


On peut attacher une pice jointe aux messages changs par le web service.

Diffrentes options de web service WS-* sont possible comme WS-Security qui permet
de configurer la scurit, comme la mise en place du chiffrement des donnes, ou encore
l'authentification.

WS-Addressing : Standard permettant de transmettre des messages SOAP.

WS-Security : permet d'appliquer des options de scurit.

WS-securityPolicy : reprsente un ensemble d'options qui dcrivent les


possibilits et les contraintes de scurit.

WS-ReliableMessaging : Spcifications sur la fiabilit des messages.

Le Framework en PHP est constitu du service API et client API qui permet
linterprtation et le traitement des commandes en langage PHP vers le cur en C. Le
Framework permet de gnrer et d'interprter le WSDL (Web Service Description
Langages). Celui-ci fournit une description des actions possibles du web service en
format XML. En outre, le WSDL dcrit le protocole de communication SOAP, le format
des messages requis pour communiquer avec le web service, les mthodes que le client
peut invoquer.
Enfin, le web service est compatible avec .NTE et Java qui permet l'interoprabilit entre
plusieurs langages.

Gatan TURCAS

Scurisation de web service

2012/2013

2.3. Utilisations et utilisateurs


Aujourd'hui, la plate-forme de web service WSO est utilise au niveau international dans
diffrents domaines. Par exemple, le domaine du commerce en ligne, des transports ou
encore de la communication. Des entreprises comme Ebay ou Expedia se servent du web
service WSO.
Dans l'image ci-dessous vous pouvez voir diffrents domaines d'utilisation ainsi qu'un
panel de clients qui utilisent le web service WSO.

Source : http://wso.com
Exemple d'utilisation avec Expedia
Expdia est une agence de voyages. Lorsquun client d'Expdia va sur le site internet :
expedia.com, celui-ci accde un formulaire de recherche de voyage , cette page internet
affiche dans le navigateur web d'un utilisateur est considre comme client.

Gatan TURCAS

10

Scurisation de web service

2012/2013

Ci-dessous le site Expedia.fr avec son formulaire de recherche de voyage.

Une fois que l'utilisateur du site a rempli le formulaire de recherche de vol, celui-ci va
cliquer sur rechercher un voyage, le client web va envoyer une requte contenant les
informations inscrites dans le formulaire au service web. Le service va rechercher dans
sa base de donnes les vols possibles en fonction des contraintes inscrites dans le
formulaire, puis va renvoyer une rponse au client web avec les rsultats de sa
recherche.
Ci-dessous la rponse du site Expedia pour la recherche dun vol Paris New York.

Gatan TURCAS

11

Scurisation de web service

2012/2013

Enfin, la compagnie WSO2 propose plusieurs autres applications, serveurs et modules


qui ne seront pas tudis dans ce projet.

Gatan TURCAS

12

Scurisation de web service

2012/2013

3. Les objectifs
Cette partie est ddie l'explication des diffrents objectifs du projet, ainsi que la
ralisation, solution, et quelques problmes rencontrs. Les l'objectifs du projet ont t
dcoups en quatre tches : Installation, tests de scurit, mise jour de scurit et enfin
inclure du CDATA.

3.1. Installation
Le premier objectif du projet consiste installer la plateforme WSO2 for PHP dans un
environnement de test. Pour ce faire, j'ai mis dans un premier temps, un environnement
virtuel avec le logiciel VirtualBox. Cette solution de virtualisation me permet de
transporter et d'exporter mon travail d'un ordinateur un autre sans modifier
l'environnement du systme d'exploitation de la machine mre. Vous trouverez dans
lannexe les dtails des commandes pour linstallation.
Ensuite, partir de VirtualBox, j'ai install un systme UNIX Debian. WSO2 est
galement compatible pour une installation Windows. Mon choix s'est port sur le
systme UNIX qui me permet contrairement son concurrent Microsoft d'avoir une
visibilit supplmentaire sur se qui se passe vraiment.
Avant de mettre en place la plate-forme, WSO2 a besoin pour fonctionner de certains
prs requis. Il faut tout d'abord installer :

Le serveur Web Apaches avec quelques modules associs.

PHP5 pour le langage de programmation PHP avec quelques modules associs.

OpenSSL pour la scurit et la gnration de certificats.

Une fois les diffrents services installs, il faut tlcharger WSO2 framework for PHP, le
compiler et l'installer. Enfin, il reste configurer PHP5 avec la plate-forme.
Ci-dessous le schma dinstallation

Gatan TURCAS

13

Scurisation de web service

2012/2013

3.1.1. Problmes rencontrs


Linstallation de la plate-forme WSO2 a t assez lourde mettre en place. La
documentation fournie par WSO manque d'informations et de dtails au niveau des prs
requis dinstallation. En effet, il faut notamment activer les services comme PHP dans un
certain mode ou version ( dev ). cause de ce problme de mode, la compilation de
WSO chouait. J'ai rsolu le problme de chaque module un un avec lerreur fournie
chaque compilation (30 minutes une compilation...).
Autres problmes : La prise en charge du mode WSDL ne se faisait pas correctement une
fois la plate-forme WSO excute. Le problme tait d la mauvaise configuration de
PHP qui chargeait mal lenvironnement de WSO. J'ai russi le rsoudre avec l'aide de
mon tuteur de projet en corrigeant un fichier de configuration de PHP.
Malgr quelques difficults d'installation, la plate-forme de web service est finalement
oprationnelle pour les tests.

Gatan TURCAS

14

Scurisation de web service

2012/2013

3.2. Tests de la plate-forme


Dans cette partie, je vais vous prsenter le fonctionnement de la plate-forme partir de
la solution installe prcdente.
WSO fournit des exemples accessibles via le navigateur web qui permet de valider et de
comprendre le fonctionnement des requtes changes entre clients et services, la
gnration de WSDL, diffrentes options de scurit.

Dans l'image ci-dessous vous pouvez apercevoir la page d'exemple fourni par WSO

Dans chaque exemple on, peut afficher le code en PHP de la partie client et du service.
Le bouton WSDL permet d'afficher en langage XML la description du service. En enfin, le
lien run client excute la page PHP du client.
Ci-dessous un extrait du premier exemple au format WSDL.

Gatan TURCAS

15

Scurisation de web service

2012/2013

Ci-dessous le premier exemple excut.

Ces premiers exemples simples mont permis de comprendre le fonctionnement de la


plate-forme WSO. J'ai ainsi abouti crire un code afin de comprendre et vrifier le code
ct service et client. J'ai donc suivi un tutoriel recommand sur le site wso.com pour les
dbutants, afin de tester le mcanisme de messages envoys entre client et service.

3.2.1. Mon premier service


Mon premier service va calculer la valeur factorielle d'un nombre. On se place dans
l'optique gnrale que le service est hberg sur un serveur avec une puissance
importante de calcul. Le client peut tre une machine lambda avec de faibles
performances. Dans notre simulation on s'imagine que le calcul d'une factorielle
require des ressources processeur importantes.
Le client veut connatre la valeur de la factorielle du nombre 10. Il va envoyer une requte
HTTP contenant un message SOAP. Dans celui-ci, on trouve en XML la valeur 10. Le service
rceptionne la requte et interprter le message. Il calcule la factorielle du nombre 10, et il
renvoie une rponse contenant les rsultats de la factorielle 10.
L'image ci-dessous met en vidence les changes de message entre clients services.

J'ai ainsi cr un fichier client.php contenant le code client permettant d'envoyer et


recevoir des requtes au service de factorisation service.php. Ce dernier est aussi un
fichier programmer
Le code PHP du client: En vert le code en PHP en rouge la partie requte en XML qui sera
envoye au service, en jaune (optionnel) affiche dans le navigateur web les messages
envoys et reus..
<?php
$requestPayloadString = <<<XML
<getFactorial>
<param>10</param>
</getFactorial>
XML;

Gatan TURCAS

16

Scurisation de web service

2012/2013

$client = new WSClient(array("to" => "http://localhost/facto/service.php"));


$response = $client->request($requestPayloadString);
$simplexml = new SimpleXMLElement($response->str);
echo "Result = ".$simplexml->result[0]."<br/>";

printf("<br/> Request = %s </br>", htmlspecialchars($client->getLastRequest()));


printf("<br/> Response = %s </br>", htmlspecialchars($client->getLastResponse()));
?>

Pour le service en PHP : En vert le code en PHP, en rouge la rponse en XML qui sera
envoye au client.
<?php
function factorial($number) {
if ($number == 0) return 1;
return $number * factorial($number - 1);
}
function getFactorial($message) {
$simplexml = new SimpleXMLElement($message->str);
$value = $simplexml->param[0];
$result = factorial($value);
$responsePayloadString = <<<XML
<getFactorialResponse>
<result>$result</result>
</getFactorialResponse>
XML;
$outMessage = new WSMessage($responsePayloadString);
return $outMessage;
}
$service = new WSService(array("operations" => array("getFactorial")));
$service->reply();
?>

En excutant le client dans un navigateur, on obtient le rsultat suivant :


Result = 3628800
Request = <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope"><soapenv:Body><getFactorial> <param>10</param>
</getFactorial></soapenv:Body></soapenv:Envelope>

Gatan TURCAS

17

Scurisation de web service

2012/2013

Response = <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope"><soapenv:Body><getFactorialResponse> <result>3628800</result>


</getFactorialResponse></soapenv:Body></soapenv:Envelope>
La rponse du service donne le rsultat de la factorielle 10 qui est 3628800.
En jaune, on peut remarquer la requte envoye du client au service. Le message
contient une enveloppe SOAP constitue de balise XML avec la valeur 10.
En rouge, la rponse du service qui utilise galement le standard SOAP. On peut voir le
rsultat dans la rponse reue par le client.
Concernant la scurit de cet change entre client service, rien ne prouve que le service,
ou client contact soit bien le bon. Les messages peuvent tre couts et lu par une
personne extrieure en coutant le canal de transmission avec un outil comme tel que
Wireshark. Enfin, le service ne demande pas d'authentification au client. Il est donc
important de scuriser ses changes. C'est pour cette raison que le projet porte sur des
tests de scurit

3.2.2. Tests de scurit


Les trois critres de scurit reposent sur la: disponibilit, l'intgrit et la
confidentialit.

Source de l'image Wikipedia.org


La disponibilit : Vise rendre le plus disponible et fonctionnel le systme informatique.
Il est possible de calculer la disponibilit en pourcentage sur une priode dfinie. Pour
assurer la disponibilit, plusieurs moyens peuvent tre combins tels que la
sauvegarde, redonder les quipements, et enfin prvoir un plan de reprise d'activit
(PRA).
Intgrit : a pour objectifs de garder les donnes intactes que ce soit dans une
transmission, dans un stockage ou encore de leur traitement. L'intgrit vise s'assurer
que les donnes nont pas t altres (modifies) par un pirate ou une erreur de
traitement. Afin de permettre une intgrit des donnes pendant les changes, il faut
utiliser une fonction de hachages tels que MD5 (Message Digest 5) et des certificats clef

Gatan TURCAS

18

Scurisation de web service

2012/2013

publique et prive. Ces derniers prouvent l'identit des deux correspondants par
exemple entre client et service. La fonction de hachage permet de donner une empreinte
unique une donne, si la donne a t modifie l'empreinte changera aussi. On peut
ainsi prouver que la donne n'a pas t corrompue. Cette section de scurit permet de
se prmunir de la clbre attaque de l'homme du milieu.
La confidentialit : a pour but de rendre accessible l'information uniquement aux
personnes autorises et authentifies. La confidentialit peut tre associe aux donnes
d'un systme d'information, et aussi aux messages transmis entre entits. Pour rendre
cette confidentialit possible, il faut chiffrer les donnes et messages avec un algorithme
de cryptographie tel que RSA (Rivest Shamir Adleman). Il y a deux possibilits : soit
d'utiliser un secret partag (dit symtrique), ou le systme de certificats clef publique
et clef prive (dit asymtrique).
Enfin, sur les donnes stockes dans le systme d'information, il faut utiliser des parefeu pour bloquer les ventuelles intrusions.
De plus l'authenticit est primordiale dans la scurit car elle vise vrifier la bonne
identit d'une personne. C'est pour cette raison que j'ai dcid d'utiliser le systme de
certificat X509 pour les tests du web service. Dans cette tude, le critre de disponibilit
ne sera pas utilis, pour la raison que les options ne dpendent pas directement du web
service, mais plutt du systme mit en place autour (tel quun serveur de sauvegarde).

3.2.3. Fonctionnement des certificats


Utilit : pour identifier une ressource, chiffrer les donnes changes entre deux entits.
Le certificat doit tre sign par un tiers de confiance tel que verising pour prouver la
valeur sre de lidentit de celui qui possde le certificat. Le tiers de confiance permet de
rvoquer un certificat si l'utilisateur du certificat est frauduleux, ou encore sil a t
victime d'un piratage. Un certificat rvoqu par une autorit, n'est plus valid auprs des
navigateurs web, ou autres outils qui vrifient le tiers de confiance. Dans le cas de notre
web service, nous allons utiliser des certificats auto-signs pour des raisons de
simplicit et de prix.(un certificat sign par un tiers un cot).
Notre client et service possdent chacun une paire de clefs publique et prive.
Si le client envoie un message chiffr (avec le couple clef publique du service et clef
prive du client) au service, celui-ci est sr que c'est le client qui a envoy le message,
car le service connat la clef publique du client et peut dchiffrer le message avec le
couple clef publique du client et clef prive du service

Gatan TURCAS

19

Scurisation de web service

2012/2013

Dans limage ci-dessus le client et service schangent des messages chiffrs avec la cl
publique du client et du service (selon le sens des requtes). Le pirate peut couter les
messages chiffrs changs. Il connait les clefs publiques du client et service. Seulement
pour dchiffrer les messages, il lui faut au moins une clef prive quil ne possde pas.
Pour crer les certificats, j'ai utilis Openssl. Dans un premier temps, on gnre un
certificat non sign.csr et une cl prive.pem.. Puis on cre un certificat ca.crt qui va
permettre d auto-signer le certificat .crs. Quand celui-ci est sign par le certificat
dautorit, il obtient comme extension .crt .
Lutilitaire Keytool permet de crer des keystore . Un keystore permet de contenir
plusieurs certificats et clefs prives. C'est en quelque sorte un coffre contenant des
certificats. Le keystore permet une gestion simplifie des certificats. WSO prend en
charge les keystore au format p12. J'ai donc dcid de crer un keystore pour le client et
un pour le service.

Gatan TURCAS

20

Scurisation de web service

2012/2013

Ci-dessous un schma rassemblant clef prive, certificat (clef publique) et le keystore.

Ci-dessous le certificat client.crt gnr (clef publique) :

Ci-dessous la clef prive client.key :

Gatan TURCAS

21

Scurisation de web service

2012/2013

Pour chacun des tests suivants, le client va envoyer hello au service, celui-ci doit rpondre se
qu'il reoit laide de la fonction echo . Seules les options de scurit WS-Security
changent.
Sauf pour le premier test, les rponses affiches ne sont pas compltes cause de leurs
longueurs.

3.2.4. Test 1 aucune scurit


Le premier test doit permettre de comparer un test sans scurit et un avec scurit.
Response = <ns1:echoString
xmlns:ns1="http://wso2.org/wsfphp/samples"><text>Hello</text></ns1:echoString>
Request = <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope"><soapenv:Body><ns1:echoString
xmlns:ns1="http://wso2.org/wsfphp/samples"><text>Hello</text></ns1:echoString></soape
nv:Body></soapenv:Envelope>
Response = <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope"><soapenv:Body><ns1:echoString
xmlns:ns1="http://wso2.org/wsfphp/samples"><text>Hello</text></ns1:echoString></soape
nv:Body></soapenv:Envelope>
Ici on peut voir que les deux requtes changes (rouge requte client ->service et en
vert rponse du service ->client) ne possdent pas de champs d'authentification. Les
messages circulent en claire, ce qui induit que n'importe quel client peut communiquer
avec le service se faisant passer pour n'importe qui.

3.2.5. Test 2 Authentifications


Authentification par login et mot de passe (mode digest pour le mot de passe c'est--dire
qu'il doit tre chiffr) : Pour des raisons de longueur et pour faciliter la comprhension,
Le client et le service utilise les certificats pour sauthentifier en plus du login et mot de
passe.
Rappel, partir de ce test, les requtes prsentes sont des extraits.
Dans la requte envoye par le client on retrouve le login Gaetan (en vert) et le mot de
passe chiffr (en rouge) qui tait secure :
<wsse:Username>gaetan</wsse:Username><wsse:Password Type="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-username-token-profile1.0#PasswordDigest">fSAOwuJcTvggljQlZkABnx01dlk=</wsse:Password>
></soapenv:Header><soapenv:Body><ns1:echo xmlns:ns1="http://wso2.org/wsfphp/samples"><text>Hello
World!</text></ns1:echo></soapenv:Body></soapenv:Envelope>

Gatan TURCAS

22

Scurisation de web service

2012/2013

Dans la requte et la rponse on peut voir en claire le message hello (en jaune).

3.2.6. Test 3 Chiffrements


Dans ce test, on va chiffrer les donnes envoyes au service. Mise en place des certificats
sur le client et service. Le client connait la clef publique du service, et le service connait
la clef publique du client.
Dans le message envoy au service on ne peut plus voir le texte hello : il y a, la place la
clef du certificat gnr avec RSA(en vert) puis suivi du texte chiffr (en rouge) avec
l'algorithme AES-256 (Advanced Encryption Standard) :
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/><ds:KeyInfo
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:SecurityTokenReference
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext1.0.xsd"><ds:X509Data><ds:X509IssuerSerial><ds:X509IssuerName>C=fr, ST=normandie, L=caen,
O=Internet Widgits Pty
Ltd</ds:X509IssuerName><ds:X509SerialNumber>1</ds:X509SerialNumber></ds:X509IssuerSerial></ds:X5
09Data></wsse:SecurityTokenReference></ds:KeyInfo><xenc:CipherData><xenc:CipherValue>NooJg72e1ea
eoiFySOGSdHbhKEcFiaNOXapsrFfpqcTdwyQhBHn9Vx5sB9UBbQsgGUm7my61hWX7RfiaU9Xfbw==</xe
nc:CipherValue></xenc:CipherData><xenc:ReferenceList
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:DataReference URI="#EncDataID-cc4bccae-80fd1e21-3173"/></xenc:ReferenceList></xenc:EncryptedKey><xenc:EncryptedData
Type="http://www.w3.org/2001/04/xmlenc#Content" Id="EncDataID-13564786-80fa-1e21-30d6"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#aes256cbc"/><xenc:CipherData><xenc:CipherValue>C5xe8BqGutF3pAUOjUK3wh0O5MoscJOSIrSadTYlQ1JC+1/z
SNPTUwyfOmWRYcQDwRQqeUtV3TZOdufTxIYGyTRBpE/4G0b1VCB17G0cDVdtadkwc2VbKlgZG69f7
GZOQbTSGmszAnqp54iFroiFBg==</xenc:CipherValue></xenc:CipherData></xenc:EncryptedData>

Ainsi, on peut dire que le chiffrement est efficace, car le message HELLO ne circule
plus en claire.
Dans la rponse on peut galement remarquer les informations sur le certificat en vert,
mais il y a dans la rponse le texte en claire ( en rouge) .
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/><ds:KeyInfo
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:SecurityTokenReference><ds:X509Data><ds:X509I
ssuerSerial><ds:X509IssuerName>C=fr, ST=normandie, L=caen, O=Internet Widgits Pty
Ltd</ds:X509IssuerName><ds:X509SerialNumber>1</ds:X509SerialNumber></ds:X509IssuerSerial></ds:X5
09Data></wsse:SecurityTokenReference></ds:KeyInfo><xenc:CipherData><xenc:CipherValue>0aM2VbK2O
OP4D7JFAAEOpFlV/x60P8y76fGtBI4q5vX8pm5DBWHBFn1HruEMjjJSdvBaOU8/HIhvqxvdh+5y+g==</xe
nc:CipherValue></xenc:CipherData><xenc:ReferenceList><xenc:DataReference URI="EncDataID-cc51dee680fd-1e213121"/></xenc:ReferenceList></xenc:EncryptedKey></wsse:Security></soapenv:Header><soapenv:Body><n
s1:echo xmlns:ns1="http://wso2.org/wsfphp/samples"><text>Hello
World!</text></ns1:echo></soapenv:Body></soapenv:Envelope>

La confidentialit des messages transmis entre client et service est compromise si le


message circule en claire dans la rponse.

Gatan TURCAS

23

Scurisation de web service

2012/2013

J'ai abouti deux hypothses sur la question : pourquoi dans la rponse le message n'est
pas chiffr ?
1. WSO un problme de chiffrement dans la rponse du service. Dans le code du
service il y a bien le chiffrement d'activ.
2. Le client dchiffre directement le message ds la rception donc le chiffr non
visible cet instant.
Solution possible pour vrifier la deuxime hypothse : on peut regarder les changes
avec Wireshark qui va capturer toutes les trames IP changes.
On peut voir sur la capture avec wireshark que la rponse du service captur est en
claire contrairement la requte du client.

L'hypothse numro deux concluante. Il y a donc potentiellement un problme de


scurit au niveau de la plate-forme WSO.

3.2.7. Test 4 Signatures avec les certificats


Rappel : la signature permet de vrifier la bonne identit d'un client ou d'un service.
En jaune la signature cre avec le certificat. De plus, on remarque en rouge que le
message est envoy en claire ce qui est normal, car l'option de chiffrement n'est pas
active.
<ds:Signature Id="SigID-f010797c-8112-1e21-3171"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#SigID-f00e9102-81121e21-3170"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-excc14n#"/></ds:Transforms><ds:DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>NxMzh4WZhwYyEVTvxGS6eskd
9Bg=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>FRjcLX0z9jKorXzZu4rXw/OL
LFtgiraKH2l22PpCVTGKuqcdUeYnSKUd+5XZHlNccRIayuGWLgeoFGerZXSHR/fEyRX3aAIyK0wLIEyhl
4JeMKzjS3dguzrouY7p9lndtlupZCBoXKEoZOMVlwWJ/IBlBACbBKaJxcDRVgTsXkc=</ds:SignatureValue
> ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security></soapenv:He
ader><soapenv:Body wsu:Id="SigID-f00e9102-8112-1e21-3170" xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><ns1:echo
xmlns:ns1="http://wso2.org/wsfphp/samples"><text>Hello
World!</text></ns1:echo></soapenv:Body></soapenv:Envelope>

La rponse contient galement la signature.

Gatan TURCAS

24

Scurisation de web service

2012/2013

3.2.8. Test 5 Temps de validit d'un message


L'option timestamp permet de dfinir une heure de validit de la requte envoye. J'ai
programm une valeur de 60 secondes de validit.
Dans la requte envoye au service, on peut voir en jaune l'option de date de validit. Ici
la requte expire le 2013-02-28 13:46:53. En rouge le message est transmis en claire ce
qui est normal, car l'option de chiffrement n'est pas active
<wsu:Timestamp wsu:Id="SigID-2b6e5198-81ad-1e21-3bda" xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsu:Created>2013-0228T13:45:53.230Z</wsu:Created><wsu:Expires>2013-0228T13:46:53.231Z</wsu:Expires></wsu:Timestamp></soapenv:Header><soapenv:Body><ns1:echo
xmlns:ns1="http://php.axis2.org/samples"><text>Hello
World!</text></ns1:echo></soapenv:Body></soapenv:Envelope>

Il y a la mme option dans la rponse du serveur.


Cette option de scurit permet d'viter qu'un pirate puisse rejouer des messages
envoys au service ou au client.

3.2.9. Problmes rencontrs


Au dbut des tests je devais tester la plate-forme avec un logiciel
open source SoapUI. Celui-ci permet de tester les web service.
Malheureusement, il semble que la version de java utilise par
SoapUi pour la gestion des keystores soit incompatible avec la
version des keystores crs pour WSO. J'ai pass beaucoup de
temps corriger ce problme, mais sans succs. Cependant, j'ai
test le logiciel SoapUI sur un autre web service mit a disposition
par le tutoriel du logiciel.
Pour utiliser un service avec SoapUI, il suffit d'utiliser le format WSDL gnr par un
service avec une URL de ce type : http://monwebservice.com/service.php?WSDL
Une fois le service charg on peut configurer les options de scurit associes aux
requtes envoyes au service. Une fois correctement configur, on peut notamment faire
des tests de scurit pousss comme un test de charge de requte d'authentification.

Gatan TURCAS

25

Scurisation de web service

2012/2013

Vous pouvez voir dans l'image ci-dessous linterface graphique de SoapUI

4
2
1

1 la gestion des diffrents projets en arborescence


2 La requte envoye au service
3 L'URL du service
4 La rponse du service ici on peut voir une erreur de signature.
C'est pourquoi cause de ces incompatibilits, et en accord avec mon tuteur, j'ai fait les
tests de scurit (montrs prcdemment) en me basant sur les requtes changes
visibles dans le navigateur web, et dans Wireshark.

Gatan TURCAS

26

Scurisation de web service

2012/2013

3.3. Mise jour de scurit de la plate-forme


Le but est de mettre jour les bibliothques de scurit WS-security. WSO utilise
OpeSSL pour grer la scurit.
Au moment de la compilation du web service, celui-ci va chercher les modules et
bibliothques ncessaires. Notamment les bibliothques Openssl. La solution sur un
systme dj install, est de mettre a jour Openssl, puis de recompiler le web service
avec les nouveauts de OpenSSL.
Cette partie, valide par mon tuteur Christophe Turbout, a donc t traite assez
rapidement.

3.4. Intgrer du CDATA


Le CDATA (Caratere DATA) permet de dfinir une chane de caractre dans du XML qui
sera interprte uniquement comme du texte. Le CDATA commence une balise (en vert
dans l'exemple ci-dessous). lintrieur on retrouve du texte pouvant contenir des
symboles tels que < > & . En XML ces symboles ont une signification bien particulire
comme une balise <ma balise> , si celle-ci n'est pas ferme on a une erreur dans le
code XML. Le CDATA ne doit pas interprter les balises et symboles comme du XML (en
jaune).
<body>
Dans le body
<![CDATA[
Du texte dans le Cdata avec une fausse balise <fausse balise non ferme> & encore du texte
]]>
</body>
Par dfaut, WSO ne gre pas correctement le CDATA. En effet, certain caractres comme
< ,>, & sont quand mme interprts et peuvent provoquer des erreurs. WSO utilise
une mauvaise bibliothque XML qui pose problme avec le CDATA. La solution consiste
compiler le web service avec une option prenant en compte la dernire version
libxml2.
Test sur la plate-forme partir de lexemple de la factorielle. On va inclure du CDATA
dans le XML et vrifier le comportement. Dans le CDATA nous allons mettre une balise
non ferme, ainsi le CDATA est malgr tout interprt, mais nous allons avoir une
erreur.
Le client envoie le XML

Le service envoie du XML

<getFactorial>
<getFactorialResponse>
<param>10</param>
<![CDATA[le CDATA envoye par le
<![CDATA[le CDATA envoye par le client avec service avec <balise non fermee> suivis du

Gatan TURCAS

27

Scurisation de web service


<balise non fermee> suivis du symbole & un
chiffre 3 ]]>
</getFactorial>

2012/2013
symbole & un chiffre 3 ]]>
<result>$result</result>
</getFactorialResponse>

En jaune ci-dessus la balise qui devrait provoquer une erreur XML si le CDATA n'est pas
pris en compte.
On excute le client et on obtient le rsultat ci-dessous :
Result = 3628800
Request = <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope"><soapenv:Body><getFactorial> <param>10</param> le CDATA envoye par le
client avec &lt;balise non fermee&gt; suivis du symbole &amp; un chiffre 3
</getFactorial></soapenv:Body></soapenv:Envelope>
Response = <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope"><soapenv:Body><getFactorialResponse> le CDATA envoye par le service avec
&lt;balise non fermee&gt; suivis du symbole &amp; un chiffre 3 <result>3628800</result>
</getFactorialResponse></soapenv:Body></soapenv:Envelope>
On remarque donc dans un premier temps qu'il n'y a pas d'erreur. En regardant plus en
dtails les messages changs, on peut voir que les caractres spciaux <, > et & ont t
remplacs automatiquement par des codes (en jaune) pour ne pas tre interprts.
Maintenant, si on remplace le XML du client en enlevant lentte <![CDATA[
<getFactorial>
<param>10</param>
Le CDATA envoye par le client avec <balise non fermee> suivis du symbole & un chiffre 3
</getFactorial>
En excutant dans un navigateur, on obtient une page vide.
Dans les logs du web service on peut voir l'erreur qu'il n'arrive pas lire le XML, car le
XML a une balise non ferme.
Extrait d'un fichier de log du web service.
[Thu Feb 28 11:32:29 2013] [error] libxml2_reader_wrapper.c(954) Specification mandate
value for attribute non
-- SEVERITY_ERROR
[Thu Feb 28 11:32:29 2013] [error] libxml2_reader_wrapper.c(954) attributes construct error
-- SEVERITY_ERROR
[Thu Feb 28 11:32:29 2013] [error] libxml2_reader_wrapper.c(954) Couldn't find end of
Start Tag balise
-- SEVERITY_ERROR
Gatan TURCAS

28

Scurisation de web service

2012/2013

[Thu Feb 28 11:32:29 2013] [error] libxml2_reader_wrapper.c(443) error occurred in


reading xml stream
Le CDATA a bien rempli sa fonction de ne pas interprter le contenue du CDATA.
Lobjectif du projet d'intgrer du CDATA est donc russi et fonctionnel grce aux options
de compilation du web service.

3.5. Conclusion des quatre objectifs


L'installation de la plate-forme est assez lourde mettre en place, notamment cause de
ses pr-requis pour la compilation et une documentation pas assez dtaille. Cependant,
une fois correctement configure, la plate-forme est oprationnelle.
Le deuxime objectif tait le plus long raliser. Les tests de scurits ont t raliss un
un permettant de vrifier chaque option de scurit. J'ai cependant relev un problme
qui demande un approfondissement sur le chiffrement du message contenu dans la
rponse du service.
Les mises jour de scurit des bibliothques ws-security repose sur OpenSSL. La
solution trouve est trs simple : il suffit de compiler de nouveau le web service avec les
dernires mises jour dOpenSSL.
Enfin, le dernier objectif, d'intgrer du CDATA a t russi en important la bibliothque
libxml2 l'installation de la plate-forme.

4. Droulement du projet
Le projet a t ralis sur la priode universitaire de fin octobre 2012 dbut mars
2013 soit 18 semaines afin de rpondre aux quatre objectifs. Sur cette dure il y a eu 3
soutenances : une en anglais pour prsenter le projet, une mi parcours et enfin, une
soutenance finale.
Dans la page suivante, un diagramme de Gant sur le dcoupage et rpartitions des
diffrentes tches en fonction du temps.

Gatan TURCAS

29

Scurisation de web service

Gatan TURCAS

2012/2013

30

Scurisation de web service

2012/2013

5. Conclusion
WSO2 Framework for PHP est une solution de web service permettant d'amliorer les
performances des serveurs web. Dans ce projet universitaire de 18 semaines, j'ai d
raliser quatre objectifs : installer la plate-forme WSO2 Framework for PHP, la tester,
mettre jour les bibliothques de scurit et enfin intgrer du CDATA.
Je peux dire que ce projet de scurisation de web service a t trs enrichissant. En effet,
grce celui-ci, j'ai pu matriser de nombreuses technologies utilises dans le domaine
de la scurit et des web service trs utilises dans le monde professionnel.
De plus, le projet m'a permit dacqurir de nombreuses connaissances en matire de
programmation informatique. En effet, venant dun cursus orient Systme et rseaux,
j'avais quelques lacunes en programmation. Cependant, J'ai su les surmonter et
dvelopper au maximum mes connaissances afin de mener bien ce projet. Le web
service install est fonctionnel, et amlior.
Enfin, il reste un point de scurit approfondir, afin de dterminer pourquoi la
rponse du service n'est pas chiffre. Nanmoins, ce projet, m'a permis de comprendre
lintrt des technologies autour des web service et dassimiler son importance au sein
du monde professionnel.

Gatan TURCAS

31

Scurisation de web service

2012/2013

6. Glossaire
HTTP (Hypertext Transfer Protocol) : est un protocole de navigation internet.
HTTPS (Hypertext Transfer Protocol secure) : est un protocole de navigation internet
scurise.
SOA (Service Oriented Architecture) : Larchitecture oriente service reprsente un
moyen technique dintgration des divers systmes dinformation de lentreprise
considrant chaque ressource informatique comme un service.
SOAP (Simple Object Access Protocol) : Il permet la transmission de messages entre
objets distants, ce qui veut dire qu'il autorise un objet invoquer des mthodes d'objets
physiquement situs sur un autre serveur.
WSDL (Web Services Description Language) : dcrit une Interface publique d'accs
un Service Web.
XML (Extensible Markup Language) : est un langage informatique de balisage.
Open SSL (Secure Layer Security): Est un module utilis pour la cration de certificat.
Il permet de gnrer des cls de chiffrements
VirtualBox : Est un logiciel qui permet de lancer sur un systme dexploitation dautres
systmes.
URL (Uniform Ressource Locator): Est une adresse internet de type http://google.com
qui pointe vers une page web.
Pare-feu: Celui-ci permet dappliquer des rgles de filtrage sur le trafic entrant et
sortant dun rseau.
WS-* : reposent tous sur un ensemble de protocoles et de standards de base utilises
pour l'change de donnes entre applications dans des environnements divers. Cest une
liste de spcification lie au web service.
Certificat X509 : il est comme une carte d'identit numrique. Il est utilis
principalement pour identifier une ressource, mais aussi pour chiffrer des changes.

Gatan TURCAS

32

Scurisation de web service

2012/2013

Apache : Serveur Web le plus utilis actuellement.


PHP (Hypertext Preprocessor) : est un langage programmation principalement utilis
pour produire des pages Web dynamiques via un serveur http.
CDATA (Caratere DATA) : permet d'indiquer l'analyseur de ne pas interprter les
caractres contenu dans la section CDATA.

7. Bibliographie
Sites consults :

http://wso2.com

http://openssl.org

http://httpd.apache.org

http://php.net

http://www.xmlsoft.org

http://planet.petalslink.com/home/pygibello/2010/12/02/generation-dunkeystore-jks-contenant-un-certificat-signe-openssl-keytool/

http://wikipedia.org

Gatan TURCAS

33

Scurisation de web service

2012/2013

8. Annexe
Installation de la plateforme WSO
1. Installation de la distribution linux Debian avec interface graphique.
2. Ajout des sources liste:
On ajoute les sources listes suivantes dans le fichier /etc/apt/sources.liste :
deb http://ftp.fr.debian.org/debian stable main contrib non-free
deb-src http://ftp.fr.debian.org/debian stable main contrib non-free
deb http://ftp.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.debian.org/debian/ squeeze-updates main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

3. Installation des modules ncessaires:


Module build-essential:
apt-get install build-essential
Serveur Web apache:
apt-get install apache2

Le module PHP5 et PHP en mode dev et xsl:


apt-get install php5 php5-dev php5-xsl

Des bibliothques, et le mode axis2c pour apache :


apt-get install libaxis2c-dev libaxis2c-doc librampart-dev libaxis2c-bin libapache2-modaxis2c libxml2-dev
4. Tlchargement de la plate-forme WSO2 framework for php depuis le site officiel.
5. Compilation WSO
Dans le dossier source de wso2for php tlcharg prcdemment :
./configure ( ajouter les options si erreur)
make
make install

Gatan TURCAS

34

Scurisation de web service

2012/2013

6. Configuration de PHP
Dans le fichier /etc/php/conf/php.ini il faut ajouter les lignes suivantes afin dintgrer le web
service :
[wsf]
extension=wsf.so
extension=xsl.so
extension_dir="/usr/lib/php5/20090626+lfs/"
include_path = ".:/home/wso2-wsf-php-src-2.1.0/scripts/"
wsf.home="/usr/lib/php5/20090626+lfs/wsf_c/"
wsf.log_level=5

7. Test PHP

Pour vrifier si les modules installs sont bien activs on peut crer dans le serveur web
(/var/www/) un fichier test.php qui contient :
<?php
phpinfo();
?>
En accedant la page dans un navigateur web, on a des informations sur les modules PHP
modules activs.
8. Exemples fournis par WSO
Pour accder aux exemples fournis par WSO il faut crer un Lien symbolique :
ln -s /home/wso2-wsf-php-src-2.1.0/samples /var/www/samples
A partir de maintenant la plate-forme est oprationnelle.

9. Fichiers de logs
Il est possible de consulter les logs du web service :
/tmp/wsf_php_server.log pour la partie serveur et /tmp/wsf_php_client.log pour la partie
client.

Gatan TURCAS

35