Comment configurer IIS Express pour demander un certificat client

8

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.

Marko
la source
1
Proche? La plupart des paramètres IIS Express sont configurés dans Visual Studio et le débogage d'un programme est définitivement lié à la programmation ...
Marko
Puis une question comme "comment installer Visual Studio?" serait régulier? :)
OnOF
2
Je ne veux pas discuter ici, mais FYI IIS Express est principalement utilisé pour le débogage des applications ASP.NET car il offre des fonctionnalités que le serveur de développement ASP.NET ne prend pas en charge. Ma question est liée au débogage. Mais pour déboguer, je dois d'abord le configurer. Je pense qu'il est plus probable que cela soit déjà fait par un développeur et non par un administrateur système car ils utiliseraient le vrai IIS de toute façon.
Marko
Je ne saurais pas comment exiger par programme le certificat client pour l'accès. Cependant, voici une ressource dont j'ai trouvé l'aide. J'espère que cela aide
rahuL
Cet article fait exactement ce que vous voulez avec des étapes détaillées (je ne vais pas copier / coller ici), allez sur dcdevs.blogspot.com/2017/06/… HTH!
dotnetftw

Réponses:

5

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>
Mufasa
la source
Pas vraiment une réponse pertinente.
Azimuth
1

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.)

  1. Changer l'élément

<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.

  1. 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)

  2. 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.

  1. Copiez cette URL SSL et revenez à la page des propriétés du projet et collez-la dedans comme nouvelle URL de projet. J'ai frappé "Créer un répertoire virtuel" à ce stade, bien que certains blogs disent qu'il n'est pas nécessaire que vous ayez seulement besoin d'enregistrer le projet et de l'exécuter dans le débogage.

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).

user1161391
la source
0

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.configfichiers a changé dans Visual Studio 2015 et versions ultérieures.

Voici un aperçu de ce qu'il dit:

  1. Installez le certificat (notez que la clé privée n'est nécessaire que du côté client) sur la machine de développement (elle doit être visible dans les listes de certificats du navigateur dans leurs paramètres)
  2. À l'aide de Visual Studio, créez une nouvelle application Web
  3. Activez SSL pour votre projet : affichez les propriétés du projet (F4) -> SSL Enabledà True(notez que la SSL URLpropriété est renseignée)
  4. Configurez votre projet pour démarrer en mode SSL : allez dans Propriétés du projet (Alt + Entrée), sélectionnez l' onglet Web et modifiez l'URL du projet à celle de l'étape 3. Par exemplehttps://localhost:44300
  5. Recherchez le fichier de configuration IIS Express 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\
  6. Modifiez le fichier applicationhost.config : définissez <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />et<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
  7. Le certificat est désormais disponible à partir du code de la Request.ClientCertificatepropriété et doit être affiché lorsque vous ouvrez votre page dans le navigateur.
Aske B.
la source