You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何IIS 8.5升级到IIS 10后SSL客户端证书设置行为改变?

解决方案:IIS10下保留文件夹级客户端证书控制

核心原因

IIS10对客户端证书协商逻辑做了变更:默认仅当站点绑定开启Negotiate Client Certificate时,IIS才会向客户端请求证书;但开启后全站都会触发证书提示,原IIS8.5的文件夹级“接受客户端证书”设置无法单独生效。需结合绑定配置与路径级IIS设置实现原有需求。

步骤1:配置站点SSL绑定启用证书协商

用netsh命令重新配置站点SSL绑定,开启证书协商并禁用IIS层面的证书吊销验证(避免内部证书因吊销列表不可达导致验证失败):

netsh http add sslcert ipport=0.0.0.0:443 certhash=你的站点证书哈希值 appid={你的应用GUID} certstorename=MY verifyclientcertrevocation=disable negotiateclientcert=enable

注:替换certhash和appid为实际值,可通过netsh http show sslcert查看现有绑定信息。

步骤2:通过web.config设置路径级证书要求

在应用根目录的web.config中添加location节点,分别控制API路径和其他页面的证书行为:

针对API路径(允许证书传递到应用处理)

<location path="api">
  <system.webServer>
    <security>
      <!-- Ssl确保HTTPS,SslAcceptCert允许客户端提交证书但IIS不做验证 -->
      <access sslFlags="Ssl, SslAcceptCert" />
    </security>
  </system.webServer>
</location>

针对根目录及MVC页面(不触发证书提示)

<location path=".">
  <system.webServer>
    <security>
      <!-- 仅要求HTTPS,不主动请求客户端证书 -->
      <access sslFlags="Ssl" />
    </security>
  </system.webServer>
</location>

步骤3:禁用IIS层面的证书身份验证

确保IIS站点的客户端证书映射身份验证和IIS客户端证书映射身份验证均处于禁用状态,避免IIS提前拦截未通过验证的证书:

  1. 打开IIS管理器,选择目标站点
  2. 进入“身份验证”功能
  3. 找到上述两项身份验证,设置为“禁用”

验证效果

  • 访问MVC视图页面:浏览器不会弹出证书选择提示
  • 调用API接口:客户端提交的证书会被传递到Owin中间件,由应用自行完成验证,不再返回403

内容的提问来源于stack exchange,提问作者NiteFiddle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:22:53