我们有一个 ColdFusion 11 网站,需要客户端证书,在可公开访问的 Windows Server 2012R2 上运行,该 Windows Server 2012R2 运行 IIS 8.5。有一个 URL 重写规则用于删除服务器响应标头中设置的值。当提供有效的客户端证书时,此规则有效,但如果客户端计算机没有客户端证书或取消了客户端证书提示,则重写规则将被忽略或绕过,响应标头将报告 IIS 版本。IIS 日志表明正在返回适当的 403.7 响应。在服务器或站点级别配置重写规则会导致完全相同的行为。
我们有一个类似的服务器,运行 .NET 应用程序,无论针对客户端证书提示采取何种操作,它都会处理重写规则。(还有另一台带有 .NET 应用程序的服务器,它像 ColdFusion 站点一样失败。)比较 web.configs、IIS 站点设置,甚至 applicationHost.config,都没有发现任何能够解释这种行为差异的区别。(这并不是说答案不存在,只是我没有找到答案。)
例如,在没有客户端证书的计算机上使用浏览器开发工具,访问这些网站的所有尝试都会导致 403 响应。在响应标头详细信息中,IE、Edge 和 Firefox 会显示“坏”服务器的 IIS 版本,但会显示“好”服务器的重写规则值。Chrome 会报告所有服务器的“无法加载响应数据”。
鉴于 .NET 和 ColdFusion 站点都表现出不良行为,我怀疑问题出在 Windows/IIS 系统中,并且发生在 ColdFusion 出现之前,但我在网上找不到足够的信息来进一步调查。我读到的信息表明,由于响应不是 Microsoft-HTTPAPI/2.0,因此请求已越过 http.sys。这一点以及响应代码为 403.7(禁止:需要客户端证书)的事实表明它实际上正在到达 IIS,但为什么不遵守重写规则?
有人能告诉我哪些配置设置可能导致这些服务器之间的行为不同吗?或者有资源可以帮助我了解可能影响该问题的 IIS 和 http.sys 之间的关系吗?大约一周前,我在 Server Fault 上发现了一篇帖子,似乎有一线希望,但在关闭一晚后,无法重现搜索以返回它;哎呀。提前谢谢了。