Documente Academic
Documente Profesional
Documente Cultură
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
Une nouvelle Solution contenant un nouveau Projet est cre. Un fichier "Service1.asmx" apparat aussi, il contiendra la dfinition de notre Webservice.
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.
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".
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
-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
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"
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
http://defaut.developpez.com/tutoriel/dotnet/webservices/https/cs/
Crer et consommer des webservices scuriss par HTTPS en C# par Julien DEFAUT
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 :
"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
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).
- 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.