是否可以在web.config中配置客户端证书设置

bil*_*iam 18 .net c# asp.net iis ssl

我正在使用SSL应用程序,我想控制哪些文件夹忽略,要求或接受客户端认证.

最终目标是让webApp的子文件夹忽略客户端认证.我不希望通过IIS执行此操作,因为它必须在整个Web场中进行复制.

有任何想法吗?

com*_*ech 28

您可以使用访问部分和locationsweb.config(或相应子目录中的web.configs)的组合来配置它.

例如,要在目录Interface中要求SSL证书,可以将以下块添加到web.config的配置部分:

  <location path="Interface">
    <system.webServer>
      <security>
        <access sslFlags="Ssl,SslRequireCert" />
      </security>
    </system.webServer>
  </location>
Run Code Online (Sandbox Code Playgroud)

注意:正如@Jonathan DeMarks在评论中所述,我还需要包含SslNegotiateCert它才能使其运行(使用IIS 8.5和Chrome).所以我的工作配置是: sslFlags="Ssl,SslRequireCert,SslNegotiateCert" 实际上我得到一个错误,说明我正在指定,SslRequireCert但我可以使用SslNegotiateCert.

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

technet文档中的标志值为:

没有.此默认设置禁用站点或应用程序的SSL.

SSL.该站点或应用程序需要SSL.

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

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

然而

access默认情况下,不能覆盖该部分.

为了支持这一点,您必须在C:\ Windows\System32\inetsrv\config(或安装的相应目录)中修改applicationHost.config并更改以下行:

<section name="access" overrideModeDefault="Deny" />
Run Code Online (Sandbox Code Playgroud)

至:

<section name="access" overrideModeDefault="Allow" />
Run Code Online (Sandbox Code Playgroud)

  • 我还必须添加SslNegotiateCert或者出现错误,所以最终看起来像这样:<access sslFlags ="Ssl,SslRequireCert,SslNegotiateCert"/> (2认同)