有人知道如何配置 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 及更高版本中发生了变化。
以下是其内容概要:
- 安装证书(请注意,私钥仅在客户端是必要的)在开发机器上(它应该在浏览器设置中的证书列表中可见)
- 使用 Visual Studio,创建新的 Web 应用程序
- 为您的项目启用 SSL:查看项目的属性(F4)->
SSL Enabled
(True
注意SSL URL
属性已填充) - 将项目设置为以 SSL 模式启动:转到项目属性(Alt+Enter),选择网页选项卡并将项目网址修改为步骤 3 中的网址。例如
https://localhost:44300
- 找到 IIS Express 配置文件
applicationhost.config
:在 2015 年或 2017 年,该文件位于[solution directory]\.vs\config\
- 在早期版本中,它位于%UserProfile%\Documents\IISExpress\config\
- 修改 applicationhost.config 文件:设置
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
并<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
- 现在可以从属性中的代码中获得证书
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 上运行项目时,将使用配置文件下的那个,另一个可以使用命令行运行,这就是我在本地测试机器上所做的。)
- 更改元素
< 访问 sslFlags="None" /> 至 < 访问 sslFlags="SslNegotiateCert" />
和元素
< iisClientCertificateMappingAuthentication 已启用 =“false” > </ iisClientCertificateMappingAuthentication >
到
< iisClientCertificateMappingAuthentication 已启用 =“true” > </ iisClientCertificateMappingAuthentication >
接下来的两个步骤都必须在 Visual Studio 中执行。默认情况下,在 VS 2012 中创建新项目时,它将被创建为 IIS Express 项目。转移到 VS2012 的旧项目可能必须实际更改该设置。
在“项目属性”页面的“Web”选项卡上,将“使用 Visual Studio 开发人员服务器”更改为“使用本地 IIS Web 服务器”。(如果您的计算机上没有安装常规 IIS(这些 NMCI 计算机上无法安装),则应该有一个灰色的复选框,显示“使用 IIS Express”。)应该有一个项目 URL,内容如下http://本地主机:62714/ (该端口应与 Visual Studio 开发服务器设置下设置为“特定端口”的端口相同(如果已设置)
然后在解决方案资源管理器中选择项目并转到属性选项卡。(有时必须执行几次才能显示属性。)这将具有三个属性,SSL Enable(默认为 false)、SSL URL(对于新项目为空白)和 URL(设置为属性选项卡上“项目 URL”中的 URL)。
将 SSL 启用属性更改为 true,然后将创建一个新的 SSL URL。
- 复制该 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 项目)。