为什么 IIS 的 SSL 设置(客户端证书)行为在 IIS 8.5 和 10 之间发生了变化?

问题描述 投票:0回答:1

我负责一个遗留的 .Net 4.8 应用程序,该应用程序具有 MVC 和 API 组件,并且仅在内部使用。该应用程序服务器已从 Windows Server 2012 R2 就地升级到 Server 2019,即 IIS 8.5 到 IIS 10。没有实施其他更改,组策略是相同的。

API 的一小部分由使用预先注册的客户端证书进行身份验证的机器访问。证书验证通过 Owin 中间件在应用程序中进行,这意味着客户端证书需要通过 IIS,以便应用程序可以对其进行操作。在 2012R2/IIS 8.5 上,这非常简单,API 所在的特定文件夹上的 SSL 设置被设置为接受客户端证书(如图所示)。应用程序根“SSL 设置”设置为“忽略”,因此站点的其余部分(包含视图)避免了浏览器提示输入证书。

IIS SSL Config Screenshot 现在,在 2019/IIS10 上,包含客户端证书的请求会失败并显示 403 - 禁止,并且应用程序日志记录显示该请求从未发送到 API。 IIS 现在似乎假设,如果提供了客户端证书,那么它应该将其用于基于 IIS 的身份验证,然后会失败。我是否遗漏了 10 中引入的有关 IIS 身份验证的内容 - 允许所有证书的内容,以便我的 API 中间件和管理身份验证?

我尝试过的事情: 通过 reg 键启用“DS Mapper”以进行 url 映射/绑定 - 行为没有变化。

使用 netsh 重新创建站点级别绑定 (:port) 并启用“协商客户端证书”将允许证书传递到 API,但这意味着整个站点会在所有视图上提示输入证书。像以前一样,单个文件夹的这种行为在哪里?

这个人似乎也有同样的问题。

https://serverfault.com/questions/1076490/browser-not-prompting-for-certificate-iis-10-0
任何帮助或想法将不胜感激。

.net iis client-certificates windows-server windows-server-2019
1个回答
0
投票

https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-403-forbidden-access-website

该服务器在受信任的根存储中拥有证书(代码签名证书和外部 API 证书),这些证书具有不同的颁发者和颁发者字段。在识别出至少一个需要移至中间证书存储区的证书后,我从页面运行 powershell 来识别其余证书(get-Childitem cert:\LocalMachine oot - 递归 | Where-Object {$

.Issuer -ne $

.Subject} |格式列表 *)。这样做后,之前的行为恢复了。 具有讽刺意味的是,我知道 Windows 服务器有关受信任根存储中的中间证书的行为多年来已经发生了变化(以及它如何破坏证书验证),但我只是没有想到。 ...现在想来真是愚蠢。

为了后代,以下是启用失败请求跟踪的方法:

https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/health-diagnostic-performance/troubleshoot-arr-using-frt-rules

© www.soinside.com 2019 - 2024. All rights reserved.