Quelqu'un sait-il comment configurer IIS Express pour exiger un certificat client pour l'accès? J'essaie de déboguer une application ASP.NET problématique qui utilise des certificats clients pour l'authentification.
Quelqu'un sait-il comment configurer IIS Express pour exiger un certificat client pour l'accès? J'essaie de déboguer une application ASP.NET problématique qui utilise des certificats clients pour l'authentification.
Réponses:
Utilisez l'outil Gestionnaire IIS et suivez la documentation Microsoft Authentification de mappage de certificat client IIS <iisClientCertificateMappingAuthentication> .
Exemple de configuration:
<location path="Default Web Site">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true"
manyToOneCertificateMappingsEnabled="true">
<manyToOneMappings>
<add name="Contoso Employees"
enabled="true"
permissionMode="Allow"
userName="Username"
password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]">
<rules>
<add certificateField="Subject"
certificateSubField="O"
matchCriteria="Contoso"
compareCaseSensitive="true" />
</rules>
</add>
</manyToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
<access sslFlags="Ssl, SslNegotiateCert" />
</security>
</system.webServer>
</location>
Ce sont les instructions données par Jason Shavers dans son blog. (Mais cette page n'existe plus.) Scott Hanselman parle également d'activer SSL sur http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . Mais à aucun moment il ne fait référence au fait que le site nécessite des certificats clients.
Voici les instructions que j'ai suivies:
Changer applicationhost.config (il y en a deux dans MyDocuments \ IISExpress \ config et l'autre dans program files \ IIS Express \ AppServer par défaut, celui sous votre profil est utilisé lorsque vous exécutez un projet sur IISExpress dans VS 2012 L'autre peut être exécuté en utilisant la ligne de commande, ce que j'ai fait sur la machine de test locale.)
<access sslFlags = "None" /> à <access sslFlags = "SslNegotiateCert" />
Et l'élément
<iisClientCertificateMappingAuthentication enabled = "false"> </ iisClientCertificateMappingAuthentication>
à
<iisClientCertificateMappingAuthentication enabled = "true"> </ iisClientCertificateMappingAuthentication>
Les deux étapes suivantes doivent toutes deux être effectuées dans Visual Studio Par défaut, lorsqu'un nouveau projet est créé dans VS 2012, il est créé en tant que projet IIS Express. Un ancien projet transféré vers VS2012 devra peut-être réellement modifier ce paramètre.
Dans la page Propriétés du projet sous l'onglet Web, modifiez Utiliser Visual Studio Developer Server pour utiliser le serveur Web IIS local. (Il devrait y avoir une case à cocher grisée indiquant Utiliser IIS Express si vous n'avez pas d'installation IIS régulière sur votre machine (ce qui ne peut pas être fait sur ces machines NMCI.) Il devrait y avoir une URL de projet disant quelque chose comme http: // Localhost: 62714 / (qui doit être le même port défini comme "port spécifique" sous le paramètre Visual Studio Development Server (s'il est défini)
Sélectionnez ensuite le projet dans l'explorateur de solutions et accédez à l'onglet Propriétés. (Parfois, cela doit être fait plusieurs fois avant que les propriétés n'apparaissent.) Cela aura trois propriétés, SSL Enable qui par défaut est false, SSL URL qui est vide avec un nouveau projet et URL qui est définie sur l'URL dans " URL du projet "dans l'onglet Propriétés.
Modifiez la propriété SSL activée sur true et une nouvelle URL SSL sera créée.
Dans le fichier applicationhost.config sous l'élément "", une nouvelle entrée est créée lors de la première exécution du projet avant d'activer SSL. Il ressemblera à ceci:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
</bindings>
</site>
Lorsque vous activez SSL sur votre projet, il devrait ressembler à ceci:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
<binding protocol="https" bindingInformation="*:44313:localhost" />
</bindings>
</site>
(tous les ports 443xx sont réservés aux projets SSL).
J'ai trouvé un blog qui explique en détail comment configurer les demandes de certificat client pour IIS Express (j'ai utilisé Visual Studio 2017, IISExpress 10.0). Apparemment, l'emplacement des applicationhost.config
fichiers a changé dans Visual Studio 2015 et versions ultérieures.
Voici un aperçu de ce qu'il dit:
SSL Enabled
à True
(notez que la SSL URL
propriété est renseignée)https://localhost:44300
applicationhost.config
: en 2015 ou 2017, le fichier se trouve dans [solution directory]\.vs\config\
- dans les versions antérieures, il se trouve dans%UserProfile%\Documents\IISExpress\config\
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
et<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
Request.ClientCertificate
propriété et doit être affiché lorsque vous ouvrez votre page dans le navigateur.