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

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

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

答案1

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

答案2

我发现了一个博客详细说明了如何为 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),选择网页选项卡并将项目网址修改为步骤 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,并且当您在浏览器中打开页面时应该会提示该证书。

答案3

这些是 Jason Shavers 在他的博客中给出的说明。(但该页面已不存在。)Scott Hanselman 还谈到了在http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx 。但他从未提到让网站要求客户端证书。

以下是我遵循的说明:

更改 applicationhost.config(其中有两个,一个在 MyDocuments\IISExpress\config,另一个在 program files\IIS Express\AppServer,默认情况下,当您在 VS 2012 中的 IISExpress 上运行项目时,将使用配置文件下的那个,另一个可以使用命令行运行,这就是我在本地测试机器上所做的。)

  1. 更改元素

< 访问 sslFlags="None" /> 至 < 访问 sslFlags="SslNegotiateCert" />

和元素

< iisClientCertificateMappingAuthentication 已启用 =“false” > </ iisClientCertificateMappingAuthentication >

< iisClientCertificateMappingAuthentication 已启用 =“true” > </ iisClientCertificateMappingAuthentication >

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

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

  2. 然后在解决方案资源管理器中选择项目并转到属性选项卡。(有时必须执行几次才能显示属性。)这将具有三个属性,SSL Enable(默认为 false)、SSL URL(对于新项目为空白)和 URL(设置为属性选项卡上“项目 URL”中的 URL)。

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

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

在 applicationhost.config 文件中的“”元素下,在启用 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" />
            </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 项目)。

相关内容