如何配置IIS Express要求客户端证书


8

有人知道如何将IIS Express配置为要求客户端证书才能访问吗?我正在尝试调试使用客户端证书进行身份验证的有问题的ASP.NET应用程序。


1
关?大多数IIS Express设置都是在Visual Studio中配置的,调试程序肯定与编程有关……
Marko

然后是“如何安装Visual Studio?”之类的问题。会是普通的吗?:)
onof

2
我不想在这里争论,但是FYI IIS Express主要用于ASP.NET应用程序的调试,因为它提供了ASP.NET开发服务器不支持的功能。我的问题与调试有关。但是要调试,我需要先对其进行配置。我认为这很可能已经由某些开发人员完成,而不是由系统管理员完成,因为他们仍然会使用真正的IIS。
Marko

我不知道如何以编程方式要求客户端证书进行访问。但是,是我从中获得帮助的资源。希望这会
有所

本文完全按照您想要的详细步骤进行操作,(我不会在此处复制/粘贴),请访问dcdevs.blogspot.com/2017/06/…HTH
dotnetftw

Answers:


5

使用IIS管理器工具并遵循Microsoft文档IIS客户端证书映射身份验证<iisClientCertificateMappingAuthentication>

样本配置:

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

并不是真正相关的答案。
方位角

1

这些是Jason Shavers在他的博客中发出的说明。(但是该页面不再存在。)Scott Hanselman还在http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx上讨论了启用SSL的问题 。但他绝不是指使该站点要求客户证书。

这些是我遵循的说明:

更改applicationhost.config(默认情况下,其中两个位于MyDocuments \ IISExpress \ config中,另一个位于程序文件\ IIS Express \ AppServer中,而在VS 2012上的IISExpress上运行项目时,将使用配置文件下的另一个。使用我在本地测试计算机上执行的命令行运行。)

  1. 改变元素

<访问sslFlags =“无” />到<访问sslFlags =“ SslNegotiateCert” />

和元素

<iisClientCertificateMappingAuthentication enabled =“ false”> </ iisClientCertificateMappingAuthentication>

<iisClientCertificateMappingAuthentication enabled =“ true”> </ iisClientCertificateMappingAuthentication>

接下来的两个步骤都必须在Visual Studio中执行。默认情况下,在VS 2012中创建一个新项目后,再将其创建为IIS Express项目。转移到VS2012的较旧项目可能必须实际更改该设置。

  1. 在“ Web”选项卡上的“项目属性”页面上,将“使用Visual Studio开发服务器”更改为“使用本地IIS Web服务器”。(如果您没有在计算机上进行常规IIS安装(在这些NMCI计算机上无法进行此操作),则应使用灰色复选框,显示“使用IIS Express”。)应该有一个项目URL,其内容为http:// Localhost:62714 / (应该与在Visual Studio Development Server设置下设置为“特定端口”的端口相同)(如果已设置)

  2. 然后在解决方案资源管理器中选择“项目”,然后转到“属性”选项卡。(有时,必须在属性显示之前完成几次。)这将具有三个属性:“ SSL启用”(默认为false),“ SSL URL”(新项目为空白)和“ URL”(在“属性标签上的“项目URL”。

将启用SSL的属性更改为true,将创建一个新的SSL URL。

  1. 复制该SSL URL,然后返回到项目属性页面,并将其粘贴为新的Project URL。尽管有些博客说您不必保存项目并在调试中运行它,但我此时点击“创建虚拟目录”。

在启用SSL之前,在首次运行项目时,会在applicationhost.config文件中的“”元素下创建一个新条目。它看起来像这样:

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

在项目上启用SSL时,它应如下所示:

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

(所有443xx端口都保留用于SSL项目)。


0

我找到了一个博客,该博客详细介绍了如何为IIS Express配置客户端证书请求(我使用了Visual Studio 2017,IISExpress 10.0)。显然,applicationhost.config文件的位置在Visual Studio 2015及更高版本中已更改。

以下是其内容的概述:

  1. 在开发计算机上安装证书(请注意,私钥仅在客户端是必需的)(应在其设置的浏览器证书列表中可见)
  2. 使用Visual Studio 创建一个新的Web应用程序
  3. 为您的项目启用SSL:查看项目的属性(F4)-> SSL EnabledTrue(注意SSL URL填充属性)
  4. 将项目设置为以SSL模式启动:转到“项目属性”(Alt + Enter),选择“ Web”选项卡,然后将“项目URL”修改为步骤3中的项目。https://localhost:44300
  5. 找到IIS Express配置文件 applicationhost.config:在2015或2017年,该文件位于[solution directory]\.vs\config\-在以下早期版本中%UserProfile%\Documents\IISExpress\config\
  6. 修改applicationhost.config文件:设置<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" /><iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
  7. 现在可以从Request.ClientCertificate属性中的代码中获得该证书,并且在浏览器中打开页面时应提示该证书。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.