Configurer IIS pour utiliser vos certificats auto-signés avec votre application, y compris l’authentification de mappage de certificat client IIS – blog.

, Author

Je suppose maintenant que vous avez lu mon post précédent sur la façon de créer des certificats auto-signés pour le développement et cela pourrait vous avoir laissé penser « Yay super ! ….Mais comment puis-je les utiliser ? ». Ce billet de blog vous emmènera étape par étape à travers le processus manuel de configuration de IIS sur votre PC ou Windows Server pour utiliser vos certificats auto-signés ainsi que l’authentification de mappage de certificat client IIS.

Veuillez noter que dans mes exemples, j’utilise mon hébergement localhost et un nom de domaine aléatoire, mais vous pouvez le faire sur le IIS de votre serveur réel si vous avez une adresse IP statique de votre fournisseur de services Internet ou de votre société d’hébergement de domaine ainsi que configuré votre pare-feu, routeur etc correctement où finalement vous pouvez pointer votre nom de domaine à votre cette adresse. MAIS je ne recommanderai ni l’un ni l’autre avec des certificats auto-signés à moins que vos clients/utilisateurs ne soient disposés à recevoir et à installer votre certificat racine et votre certificat client auto-signés. Un bon exemple de ceci est dans un intranet fermé où vous avez accès à tous les ordinateurs des utilisateurs finaux parce que vous pouvez alors installer les certificats sur leurs machines, ce qui est nécessaire si vous ne voulez pas que vos utilisateurs reçoivent un gros avertissement sur les problèmes de confiance avec votre certificat de serveur auto-signé. Si vous recherchez une solution commerciale digne de la production, vous devez acheter vos certificats au lieu de les auto-signer. Maintenant que tout cela est réglé, j’utilise un PC équipé de Windows 8.1 Pro, IIS 8.5 et Visual Studio Premium 2013. (J’ai également testé avec une VM Hyper-V Windows Server 2012 R2 sur mon PC).

Installation de IIS
Si vous n’avez pas encore installé IIS sur la machine qui servira de serveur d’hébergement, veuillez le faire en appuyant sur le bouton Windows d’un PC et en recherchant « Activer ou désactiver les fonctionnalités de Windows » (ou allez dans le Panneau de configuration et recherchez). Vérifiez les services d’information Internet et les nœuds enfants suivants. 1 installation complète de IIS
(Si vous utilisez .NET 3.5, vous devez vérifier l’extensibilité .NET 3.5 et ASP.NET 3.5)

Pour Windows Server 2012, allez dans le tableau de bord du gestionnaire de serveur ➜ Cliquez sur ajouter des rôles et des fonctionnalités ➜ Choisissez l’installation basée sur les rôles ou les fonctionnalités.based installation and go next ➜ Select the server ➜ Enable the server role called Web Server (IIS) and following child elements Server IIS

Also make sure Application Development is checked with the following childnodes Server IIS application dev

Click OK and let Windows install.

Création de notre projet exemple
Pour le bien de cette démo, nous allons créer une mini application vraiment simple que nous hébergerons dans l’IIS local. (Vous pouvez aussi juste forker la mienne directement sur Github)

Dans Visual Studio, créez une nouvelle application web vide et référencez web api 5 New Project

Nous aurons juste besoin d’un contrôleur reeeeaellement simple:

using System.Web.Http;namespace IISWithCertificatesSample.WebApi.Controllers{ public class CatsController : ApiController { public IHttpActionResult Get() { return Ok("A lot of cats meowing for food"); } }}

Vous devriez maintenant être capable de lancer les deux routes (F5) et de surfer sur l’url localhost avec /api/cats (la mienne ressemble à http://localhost:62172/api/cats). Génial, hébergeons cette application en utilisant notre IIS local.

NOTE : Nous n’allons plus exécuter l’application directement depuis Visual Studio (F5) qui est paramétré pour utiliser IIS Express.

Configuration de IIS
Ouvrez votre gestionnaire IIS (bouton Windows + recherche). Ajoutez un nouveau site web et un pool d’applications avec notre exemple d’application. (Clic droit sur Sites ➜ Ajouter un site web) Le chemin doit être le dossier où se trouvent les documents de votre site web, donc si vous avez publié votre site web pointez le chemin là. Je vais juste utiliser le chemin direct du projet dans Visual Studio pour cet exemple très simple.

Maintenant hébergeons localement ce site en spécifiant le nom d’hôte AKA. votre nom de domaine. 7 votredomaine.com

Puisque je ne fais que de l’hébergement local, je dois ajouter le site à mon fichier hosts local afin de lier mon adresse IP localhost avec le nom d’hôte. Cela se fait en exécutant notepad en tant qu’administrateur et en ouvrant le fichier hosts dans le chemin : %systemroot%\System32\drivers\etc fichier hosts

Ajoutant ce qui suit à la fin : 127.0.0.1 yourdomain.com www.yourdomain.com 8 hosts file

Maintenant, chaque fois que je surfe sur yourdomain.com et www.yourdomain.com sur ma machine, il résoudra le site avec mes liaisons nouvellement ajoutées à l’adresse IP 127.0.0.1 (qui est l’IP de localhost).

Ajoutons la liaison www. binding à votre site dans le gestionnaire IIS également 9 IIS bindings 10 add http binding 11 domain with www12 both http added

Surf to the domain name you set up in the bindings with or without www. and add the ending /api/cats and you should get the meowing cats. (Si ce n’est pas le cas, essayez de vider le cache)

IMPORTANT : Cela va SEULEMENT se produire sur la machine locale parce que nous avons modifié le fichier hosts pour rediriger nos requêtes du nom de domaine que nous avons ajouté à l’adresse IP localhost. Il est destiné au développement et à pouvoir tester vos modifications avant de les déployer sur votre serveur d’hébergement web réel.

Sécuriser le serveur avec SSL
Maintenant, nous voulons sécuriser les chats en ajoutant un certificat SSL à notre serveur.
Dans votre gestionnaire IIS, allez sur votre serveur (Le haut de l’arbre à gauche) ➜ Faites défiler vers le bas et double-cliquez sur Certificats de serveur. 13 IIS Server

(Si votre certificat auto-signé est déjà ici, passez directement aux étapes de liaisons)

Nous devons importer notre certificat de serveur auto-signé afin d’activer la communication https avec SSL, donc cliquez sur Importer… 14 Importer le cert de serveur

Cliquez sur le … et trouvez votre fichier .pfx, remplissez le mot de passe (le paramètre -po dans votre fichier batch de commande) et cliquez sur OK 15 browse server cert

Votre certificat est maintenant ajouté 16 cert added

Double-cliquez sur le nouveau cert ajouté pour vérifier qu’il est de confiance (Vos certificats auto-signés ont été ajoutés aux bons magasins dans mon post précédent, donc encore une fois : lisez-le si vous êtes perdu en ce moment ;-))

17 trusted server cert

So far, so good ! Maintenant nous pouvons ajouter le binding https, de la même manière que précédemment mais choisissez https avec le port 443, votre domaine comme nom d’hôte et trouvez votre certificat auto-signé dans la liste déroulante

18 bindings add ssl

Cochez la case Server Name Indication qui permet à notre serveur d’avoir plusieurs certificats installés sur la même adresse IP en envoyant le nom d’hôte avec la première étape du handshake SSL. Répétez les mêmes étapes pour ajouter SSL pour www.yourdomain.com mais avec un certificat où le nom CN correspond au nom de domaine ou un certificat joker
19 https www avec joker

Nos liaisons sont complètes pour le moment

19 All bindings

Tadaa, vous pouvez maintenant utiliser https://yourdomain.com/api/cats et https://www.yourdomain.com/api/cats

NOTE : Firefox n’utilise pas le magasin de certificats de Windows, vous devrez donc ajouter votre autorité de certification racine manuellement. Allez dans les paramètres de Firefox ➜ Options ➜ Avancé ➜ Afficher les certificats ➜ Autorités ➜ importer votre fichier CARoot.cer

IIS Client Certificate Mapping Authentication
Nous avons maintenant fait le tour des utilisations des certificats racine et serveur et vous vous demandez probablement quoi faire avec le certificat client que nous avons également créé dans mon précédent post. Ceci est pour les situations où nous devons par exemple authentifier les clients sans avoir recours à un login et un mot de passe, mais plutôt pour que le serveur demande au client de montrer son certificat et si c’est le bon, le client est autorisé à entrer. Cela peut être fait avec un mapping Many-To-One ou un One-To-One et je vous montrerai comment faire les deux manuellement dans le gestionnaire IIS.

D’abord, nous devons installer la fonctionnalité, donc faites remonter le « Turn Windows features on or off » et installez ce qui suit 20 IIS client cert mapping

Nous allons dire à notre serveur d’exiger un certificat SSL du client 21 SSL Settings 22 apply require ssl

Puis nous devons configurer le serveur pour savoir quel certificat client il doit valider, donc allez dans l’éditeur de configuration et choisissez la section iisClientCertificateMappingAuthentication (vous pouvez aussi entrer le chemin system.webServer/security/authentication/iisClientCertificateMappingAuthentication dans le champ Section) 24 section iisClientCertMapAuth

Mappages de plusieurs à un
Si vous voulez mapper plusieurs certificats client à un seul utilisateur, cette approche est ce dont vous avez besoin. Vous pouvez également partager des certificats de client comme ceci en installant le certificat de client (et la racine de l’autorité de certification, puisque nous sommes un certificat auto-signé) sur d’autres utilisateurs sur n’importe quelle machine pour obtenir l’accès tant que le certificat de client correspond aux critères de règle du mappage. Cela serait par exemple utile dans une situation où vous voudriez que tous les utilisateurs d’une organisation obtiennent l’accès par le biais d’un seul mappage d’utilisateur.

Activer l’authentification du mappage du certificat client 25 enable client auth

Pour ajouter un mappage, cliquez sur le … du manyToOneMappings 26 add mapping

Ici vous ajoutez les utilisateurs auxquels vous voulez accorder l’accès.27 add new mapping

Remplir les propriétés d’un mapping et répéter pour chaque utilisateur que vous voulez configurer pour l’accès ou le refus. Rappelez-vous que vous avez besoin du certificat du client et du certificat de l’autorité de certification racine installés sur tous les mmc de l’utilisateur.
28 manytoone mapping

IMPORTANT : Pour que cela fonctionne, vous devez entrer un nom d’utilisateur et un mot de passe valides et puisque mon ordinateur est le serveur, les informations d’identification seront mon nom d’utilisateur et mon mot de passe Windows.

Maintenant, nous devons créer quelques règles pour aller avec ce mapping afin que le serveur puisse déterminer si un client est autorisé à entrer ou non. C’est un donc cliquez sur la propriété rules et le bouton …

29 add rule

Je vais ajouter une règle à titre d’exemple où le serveur va vérifier le certificat du client pour voir s’il est signé par la bonne racine CA. Allez-y et ajoutez d’autres règles pour plus de sécurité, veuillez visiter la référence IIS Many-To-One Mapping pour plus de documentation.
31 règle

N’oubliez pas d’appliquer les changements dans le gestionnaire IIS, donc fermez les fenêtres de règles et de mappages et cliquez sur Appliquer 32 appliquer les changements

Ouvrez une nouvelle fenêtre de navigateur incognito pour être sûr de commencer à partir d’une ardoise propre en termes de cache et de cookies et entrez votre url avec le /api/cats et voyez le navigateur vous demander un certificat. Choisissez le ClientCert et cliquez sur ok pour avoir accès aux chats. 33 ok client cert

Si cela ne fonctionne pas assurez-vous que votre certificat client est dans votre magasin CurrentUser/Personal ainsi que dans le magasin de certificats de votre navigateur. Si oui, alors allez dans Panneau de configuration ➜ Options Internet ➜ Contenu et cliquez sur Effacer l’état SSL. 34 clear ssl state

Ouvrez une nouvelle fenêtre incognito et essayez à nouveau, votre navigateur devrait maintenant vous demander le certificat du client.

NOTE : Rappelez-vous comme je l’ai expliqué plus tôt, Firefox a son propre magasin de certificats, vous devez donc importer le certificat du client dans « Vos certificats » afin d’utiliser ceci.

Mappages un à un
Promenons-nous également sur les mappages un à un. Cette approche signifie que nous avons besoin d’un certificat client individuel pour chaque mappage d’utilisateur. Vous pouvez soit désactiver le mappage many-to-one et utiliser le même certificat et le même utilisateur, soit en créer de nouveaux. Retournez dans l’éditeur de configuration et ouvrez à nouveau la section iisClientCertificateMappingAuthentication. Cliquez sur le bouton … des mappages oneToOneMappings. 35 enable one to one mappings

Pour ajouter le mappage au certificat, nous devons exporter la clé publique du fichier de certificat client. Vous pouvez exporter cela à partir de votre console de gestion de la machine (appuyez sur le bouton Windows et recherchez mmc) Snap-in le magasin personnel du certificat de la machine locale et exporter le certificat ssl client que vous voulez utiliser sans la clé privée dans le format base64. Exporter le certificat du client Avec la clé privée exportation base64

Cliquez avec le bouton droit sur le certificat nouvellement exporté et ouvrez-le avec le bloc-notes. Supprimez tous les sauts de ligne dans le certificat lui-même. Remove linebreaks

Maintenant, copiez cela dans le champ de propriété du certificat du mappage et remplissez le reste 38 add user mapping

IMPORTANT : Pour que cela fonctionne, vous devez entrer un nom d’utilisateur et un mot de passe valides et puisque mon ordinateur est le serveur, les informations d’identification seront un nom d’utilisateur et un mot de passe Windows.

Encore, n’oubliez pas d’appliquer les changements. 39 appliquer les changements

Et voilà, essayez-le et lorsque vous êtes invité à choisir le certificat que vous avez mappé à l’utilisateur que vous venez de mapper.

J’espère que vous avez trouvé ce post utile et pour mon prochain post, je vais passer par comment utiliser les certificats auto-signés avec Windows Azure et comment configurer l’IIS par le code C#, jetez-y un coup d’œil ici : http://blog.jayway.com/2015/04/21/configure-a-windows-azure-cloud-service-to-use-your-self-signed-certificates-for-iis-client-certificate-mapping-authentication/

Bonne journée =)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.