客户端证书设置可以在web.config中配置吗?

20

我正在使用SSL应用程序,并希望控制哪些文件夹忽略、需要或接受客户端证书。

最终目标是让webApp的子文件夹忽略客户端证书。我不想通过IIS来实现这一点,因为它必须在整个Web Farm中进行复制。

有任何想法吗?


如果该网站项目不需要 IIS,则可以查看 WCF 服务:http://www.codeproject.com/KB/WCF/wcfcertificates.aspx。 - MethodMan
IIS 7及以上版本使用web.config进行存储,因此如果您在IIS管理器中设置它们,您将看到您的app.config反映了这一点。 - blowdart
2个回答

31
你可以使用 access 部分和 web.config 中的 locations 组合来配置。例如,要在 Interface 目录中要求 SSL 证书,你可以将以下代码块添加到 web.config 的 configuration 部分中:
  <location path="Interface">
    <system.webServer>
      <security>
        <access sslFlags="Ssl,SslRequireCert" />
      </security>
    </system.webServer>
  </location>

注意:正如@Jonathan DeMarks在他的评论中提到的那样,我也需要包括SslNegotiateCert才能使其正常工作(使用IIS 8.5和Chrome)。所以对我而言,可行的配置是:sslFlags="Ssl,SslRequireCert,SslNegotiateCert"事实上,我遇到了一个错误,指出我正在指定SslRequireCert,但我可能想使用SslNegotiateCert

请注意,如果您想要要求Ssl,则必须添加相应的证书标志。

从technet文档中获取的标志值如下:

 

None。默认情况下,此设置禁用站点或应用程序的SSL。

    

Ssl。站点或应用程序需要SSL。

    

SslNegotiateCert。站点或应用程序接受客户端证书进行身份验证。

    

SslRequireCert。站点或应用程序需要客户端证书进行身份验证。       Ssl128.站点或应用程序需要128位SSL证书加密。

然而

默认情况下,access部分无法被覆盖。

为了支持此功能,您必须修改C:\ Windows \ System32 \ inetsrv \ config中的applicationHost.config文件(或者适用于您的安装的相应目录),并更改以下行:

<section name="access" overrideModeDefault="Deny" />

收件人:

<section name="access" overrideModeDefault="Allow" />

2
我还不得不添加SslNegotiateCert,否则会出现错误,所以最终看起来像这样:<access sslFlags="Ssl,SslRequireCert,SslNegotiateCert"/>。 - Jonathan DeMarks
我已经使用了你的解决方案,在本地和测试环境中运行良好,但在客户的服务器上出现500错误,请问你能帮我分析一下可能的原因吗?该机器使用的是Server 2012 R2。 - Rehan
我们能在 .Net Core 中实现这个功能吗?<access sslFlags="Ssl,SslRequireCert" /> - Ask
编辑applicationHost.config文件需要我先成为该文件的所有者。有些编辑器无法打开和编辑它,只能使用记事本,这很奇怪 :) (在Windows Server 2012 R2上)。 - Johan Danforth
那么,在受源代码控制的环境中,您如何做到这一点?是否没有内置方法可以在不进行自定义手动机器配置编辑的情况下进行配置? - BrainSlugs83

0

我让它以与IIS相同的方式工作(在浏览器中显示证书对话框,如果未选择则返回403.7)的方法是在web.config中按照以下顺序使用此序列:Ssl,SslNegotiateCert,SslRequireCert

因此,该部分看起来像这样:

<location path="Interface">
<system.webServer>
  <security>
    <access sslFlags="Ssl,SslNegotiateCert,SslRequireCert" />
  </security>
</system.webServer>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接