Sunteți pe pagina 1din 19

Crer et consommer des webservices scuriss par HTTPS en C#

par Julien DEFAUT

Date de publication : 13/04/2005 Dernire mise jour : 13/04/2005

Cet article dcrit les mthodes pour crer un webservice scuris en HTTPS ainsi que deux mthodes d'accs (avec et sans authentification). Le code propos est en C#. Tlchargez la version pdf - Voir la version VB.NET.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Introduction 1 - Partie serveur 1.1 - Cration du WebService 1.2 - Cration du certificat 1.3 - Configuration de IIS 1.4 - Gestion de l'authentification (Facultatif) 2 - Partie cliente 2.1 - Conception de l'interface, WinForm 2.2 - Ajout du WebService en rfrence web 2.3 - Ecriture du code Tlchargements

-2Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Introduction
Les webservices permettent une application d'appeler distance une mthode expose sur un serveur. Les informations changes transitent par le protocole HTTP et sont formates en donnes XML selon la norme SOAP. Ainsi, il est possible de faire communiquer ensemble des applications dveloppes avec des technologies diffrentes. Un inconvnient majeur des webservices aujourd'hui est l'absence de vraie scurit dans les normes officielles. Les socits se mettent alors proposer leurs propres solutions pour pallier ce manque. Cependant, ces initiatives restent souvent propritaires et font disparatre l'intrt principal des webservices : la compatibilit universelle du moment qu'une technologie sait lire et crire du xml et utiliser les sockets. Cet article a pour but de proposer une solution pour scuriser les webservices en faisant transiter les donnes par le protocole HTTPS. L'ajout de couche SSL sur HTTP est support par la majorit des serveurs web modernes comme IIS ou Apache par exemple.

Nous utiliserons IIS comme serveur web et implmenterons un webservice en ASP.NET qui sera ensuite consomm dans une Winform cliente.

La configuration utilise pour ce tutorial est : - Windows XP Pro SP1 - IIS 5.1 avec support de ASP.NET - Visual Studio .NET 2003

Pour avoir des complments sur l'utilisation des webservices en .NET : - http://morpheus.developpez.com/WebServicesCSharp/ - http://stephaneey.developpez.com/tutoriel/dotnet/webservice/

Un autre article concernant la mise en place du SSL sous IIS 5.0 dans un domaine Windows 2000 : - http://webman.developpez.com/articles/windows/ssl/

-3Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

1 - Partie serveur 1.1 - Cration du WebService


Veillez ce que IIS soit dmarr en local sur votre machine Ouvrez Visual Studio .NET Faites "Fichier > Nouveau > Projet" et choisissez "Projets Visual C# > Service Web ASP.NET" Indiquez dans Emplacement : "http://localhost/WebServicesHTTPS" puis "Ok"

Une nouvelle Solution contenant un nouveau Projet est cre. Un fichier "Service1.asmx" apparat aussi, il contiendra la dfinition de notre Webservice.

Faites un clic droit sur Service1.asmx puis "Afficher le code"

A cet instant, vous devriez avoir votre projet qui ressemble a :

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Nous allons maintenant crire une WebMethod qui va prendre en paramtre deux entiers, les additionner et retourner le rsultat.

Remplacez dans le code de Service1.asmx : C#


// [WebMethod] // public string HelloWorld() // { // return "Hello World"; // }

Par : C#
[WebMethod] public int AddInteger(int a, int b) {

-5Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

C#
return a+b; }

La mention [WebMethod] permet d'indiquer que AddInteger doit tre accessible distance.

Appuyez sur "F5", le webservice se compile et la fentre de votre navigateur par dfaut se lance. Vous pouvez alors tester votre webservice en cliquant sur "AddInteger"

Nous allons maintenant scuriser ce webservice. Dans un premier temps, un certificat va tre cr puis intgr dans IIS et associ notre rpertoire virtuel "http://localhost/WebServicesHTTPS".

1.2 - Cration du certificat


Nous allons maintenant crer un certificat qui sera stock du ct du serveur uniquement et permettra d'authoriser la communication via HTTPS lors de la connexion d'un client.

Rendez-vous sur : http://www.slproweb.com/products/Win32OpenSSL.html Tlchargez et installez : "Win32OpenSSL-v0.9.7e.exe" (fichier le plus rcent au moment d'crire cet article). On admettra que l'installation s'est droule dans "C:\OpenSSL". Lancez une fentre DOS et placez-vous dans le rpertoire "C:\OpenSSL\bin" Tapez la commande : "openssl genrsa -des3 -out TutoHTTPS.key 1024". Indiquez une phrase comme demand et ne l'oubliez pas.

Une cl prive "TutoHTTPS.key" est cre, ne la divulguez pas ... elle est prive.

Tapez la commande suivante dans la fentre DOS : "openssl req -new -key TutoHTTPS.key -x509 -days 1095 -out TutoHTTPS.crt" Entrez la phrase utilise dans la gnration de TutoHTTPS.key Entrez ensuite les quelques informations qui vous sont demandes, mettez un "." lorsque vous ne souhaitez pas rpondre.

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Le fichier "TutoHTTPS.crt" cr correspond l'authorit de certification et est diffusable librement.

La contenu de votre fentre DOS devrait ressembler a :

1.3 - Configuration de IIS


Sous Windows, allez dans "Panneau de configuration > Outils d'aministration > Service Internet (IIS)" Faites un "clic droit" sur "Site web par dfaut" puis "Proprits" Slectionnez l'onglet "Scurit du rpertoire" puis cliquez sur le bouton "Certificat de serveur ..."

-7Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Dans l'assistant, choisissez de "Crer un certificat", donnez lui comme Nom : "TutoHTTPSIIS". Suivez ensuite les instructions, laissez comme fichier de demande : "c:\certreq.txt" et allez jusqu' cliquez sur "Terminer"

Nous allons maintenant signer le certificat gnr par IIS en utilisant les cls prcdemment cres.

Lancez une fentre DOS, placez-vous dans "c:\OpenSSL\bin" Tapez : "openssl x509 -req -days 365 -in c:\certreq.txt -CA TutoHTTPS.crt -CAkey TutoHTTPS.key -CAcreateserial -out TutoHTTPSIIS.crt"

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Entrez votre phrase secrte.

Le fichier "TutoHTTPSIIS.crt" est maintenant cr dans "c:\OpenSSL\bin"

La fentre DOS correspondant ces manipulations devrait ressembler a :

Note : la chaine "minosis-small" correspond au nom DNS de l'ordinateur sur lequel ce tutorial a t crit. De nouveau, allez dans "Panneau de configuration > Outils d'aministration > Service Internet (IIS)" Faites un "clic droit" sur "Site web par dfaut" puis "Proprits" Slectionnez l'onglet "Scurit du rpertoire" puis cliquez sur le bouton "Certificat de serveur ..." Choisissez dans l'assistant de "Traiter la demande en attente et installer le certificat" Slectionnez ensuite le nouveau certificat : "C:\OpenSSL\bin\TutoHTTPSIIS.crt" Puis continuez l'assistant jusqu' "Terminer" Cliquez sur OK dans la fentre de proprits.

-9Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Le certificat de serveur est maintenant install sur IIS. Utilisons ce certificat sur le rpertoire virtuel du webservice "WebServicesHTTPS"

Dans "Site Web par dfaut", faites un clic droit sur le rpertoire virtuel "WebServicesHTTPS" puis "Proprits" Slectionnez l'onglet "Scurit du rpertoire" puis "Communications scurises > Modifier..." Dans la fentre qui apparat, cochez "Requrir un canal scuris" puis "Ok". "Ok" encore dans la fentre de proprits puis "Ok" dans la fentre "Hritages outrepasss"

1.4 - Gestion de l'authentification (Facultatif)


http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Cette tape est facultative, elle permet d'associer un utilisateur Windows la connexion HTTPS au webservice et donc de grer l'authentification de manire non anonyme (par dfaut IIS associe toute connexion un rpertoire virtuel l'utilisateur ASPNET). Si cette tape n'est pas suivie, alors la liaison HTTPS servira uniquement garantir la confidentialit des donnes.

Dans le code de l'tape 2.3, nous dissocierons les deux cas : avec ou sans authentification.

Dans "Site Web par dfaut", faites un clic droit sur le rpertoire virtuel "WebServicesHTTPS" puis "Proprits" Slectionnez l'onglet "Scurit du rpertoire" puis "Connexions anonymes et contrle d'authentification > Modifier..." Dans la fentre qui apparat, dcochez "Connexion anonyme"

- 11 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Crons un utilisateur sous Windows qui sera utilis pour l'authentification dans notre exemple.

Sous Windows, allez dans "Panneau de configuration > Outils d'aministration > Gestion de l'ordinateur" Droulez "Utilisateurs et groupes locaux" puis cliquez sur le rpertoire "Utilisateurs" Slectionnez le menu "Action > Nouvel utilisateur..." Indiquez les paramtres suivants et cliquez sur "Crer" et fermez la fentre de "Gestion de l'ordinateur" :

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

- Nom d'utilisateur : userHTTPS - Nom complet : userHTTPS - Mot de passe : titi - Confirmer le mot de passe : titi - "L'utilisateur doit changer de mot de passe ..." : Dcoch - "L'utilisateur ne peut pas changer de mot de passe" : Coch - "Le mot de passe n'expire jamais" : Coch - "Le compte est dsactiv" : Dcoch

- 13 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

2 - Partie cliente 2.1 - Conception de l'interface, WinForm


Ouvrez la solution "WebServicesHTTPS" dans Visual Studio si vous l'aviez ferme Faites "Fichier > Nouveau > Projet..." et choisissez "Projets Visual C# > Application Windows" Cochez "Ajouter la solution" et donnez comme nom : "WinCalculService", puis "Ok" Placez sur la Form, les contrles comme ci-dessous :

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

2.2 - Ajout du WebService en rfrence web


Rfrenons le Webservice :

Dans le projet "WinCalculService", faites un clic droit sur "Rfrence" puis "Ajouter une rfrence Web... " Dans la fentre qui apparat, indiquez dans le "https://localhost/WebservicesHTTPS/Service1.asmx" puis cliquez sur "Allez " Rpondez "Oui" chaque fentre de demande de confirmation Lorsque le Webservice est charg (le lien vers AddInteger doit apparatre dans la zone centrale), indiquez comme "Nom de la rfrence Web" la valeur : "com.minosis.services" (c'est un exemple bien sr) Cliquez sur "Ajouter la rfrence" champ URL :

Dans le projet, un dossier "com.minosis.services".

"Web

References"

apparatre

avec

en

contenu

- 15 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

2.3 - Ecriture du code


Dans la Form1, double-cliquez sur le bouton "button1", la fentre de code s'ouvre Ajouter en haut, les appels aux rfrences suivants : C#
using System.Web.Services; using System.Web.Services.Protocols; using System.Security.Cryptography.X509Certificates; using System.Net;

Remplacez ce code : C#
private void button1_Click(object sender, System.EventArgs e) { }

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Par :

1er cas : Vous n'avez pas suivi l'tape 1.4, donc pas de gestion de l'authentification, mettez ce code : C#
private void button1_Click(object sender, System.EventArgs e) { try { // On indique la validation automatique des demandes d'acceptation des certificats System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatesPolicy(); // Instanciation de la classe proxy permettant l'appel distant au Webservice com.minosis.services.Service1 serviceAdd = new com.minosis.services.Service1(); // Conversion des valeurs String en int int a = Int32.Parse(textBox1.Text); int b = Int32.Parse(textBox2.Text); // Appel la mthode distante. Son rsultat tant un int, on le convertit en String textBox3.Text = serviceAdd.AddInteger(a,b).ToString(); } catch // Si une exception est leve, on affiche "Erreur" dans la zone de rsultat { textBox3.Text = "Erreur"; } } // Classe implmentant l'interface System.Net.ICertificatePolicy // Permet de toujours autoriser l'acceptation des certificats public class TrustAllCertificatesPolicy : System.Net.ICertificatePolicy { public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,WebRequest req, int problem) { return true; } }

Par :

2me cas : Vous avez suivi l'tape 1.4, l'application devra s'identifier avec l'utilisateur "userHTTPS" C#
private void button1_Click(object sender, System.EventArgs e) { try { // On indique la validation automatique des demandes d'acceptation des certificats System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatesPolicy(); // Instanciation de la classe proxy permettant l'appel distant au Webservice com.minosis.services.Service1 serviceAdd = new com.minosis.services.Service1(); // Authentification avec l'utilisateur ddi au webservice : userHTTPS

- 17 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

C#
serviceAdd.Credentials = new NetworkCredential("userHTTPS","titi"); // Conversion des valeurs String en int int a = Int32.Parse(textBox1.Text); int b = Int32.Parse(textBox2.Text); // Appel la mthode distante. Son rsultat tant un int, on le convertit en String textBox3.Text = serviceAdd.AddInteger(a,b).ToString(); } catch // Si une exception est leve, on affiche "Erreur" dans la zone de rsultat { textBox3.Text = "Erreur"; } } // Classe implmentant l'interface System.Net.ICertificatePolicy // Permet de toujours autoriser l'acceptation des certificats public class TrustAllCertificatesPolicy : System.Net.ICertificatePolicy { public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,WebRequest req, int problem) { return true; } }

Vous remarquerez que seule une ligne supplmentaire est ncessaire pour cette authentification : C#
// Authentification avec l'utilisateur ddi au webservice : userHTTPS serviceAdd.Credentials = new NetworkCredential("userHTTPS","titi");

Pour tester maintenant : Faites un clic droit sur le projet "WinCalculService" puis "Dboguer > Dmarrer une nouvelle instance"

Si la compilation s'est bien droule, la WinForm cre devrait s'afficher et vous pouvez ainsi tester la consommation du webservice "WebServicesHTTPS". Tout s'est droul en local sur la machine de dveloppement. Evidemment, le but final est d'avoir chacun des projets spars sur des machines distantes.

http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/

Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT

Tlchargements
Tlchargez la version pdf de cet article. Tlchargez les sources C# de cet article (la configuration de IIS et du certificat doit tre cependant suivie).

Merci Freegreg pour la relecture.

- 19 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005Julien DEFAUT . Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrets.

S-ar putea să vă placă și