如果客户端证书设置为 'Accept' 或 'Require',IIS 7 将无法访问

IIS 7 becomes unaccessible if client certificates are set to 'Accept' or 'Require'

我有一个带有 .asmx 入口点的 web 服务,我想使用客户端证书访问它。有一些内部逻辑检查请求中客户端证书的有效性,并确保它存在于本地计算机的 'trusted people' 证书存储中。

在 IIS 中将 .asmx 文件设置为 'Accept' 或 'Require' 客户端证书在我本地的开发者盒子上工作正常,但在我们的 QA 机器上服务器没有响应,唯一的错误我从另一边得到的消息是 'The underlying connection was closed: An unexpected error occurred on a receive.' 我真的不明白的是即使非 ssl 通信也开始失败。

Wireshark 报告服务器没有发出 CertificateRequest,让我怀疑服务器的配置有问题,而不是客户端证书。 IIS 失败请求跟踪仅显示 'The I/O operation has been aborted because of either a thread exit or an application request',没有任何堆栈跟踪或有用信息。

我正在使用的客户端证书是从两台机器的受信任根证书中的根创建的,并且服务器的证书也是有效的并且在有效期内。我可以访问服务器上的其他 URL,我的浏览器没有问题,也没有 SSL 错误。

https://myservice/api.asmx // 接收意外错误

https://myservice/logon // 200,有效的 SSL 证书

有没有人有过在 IIS 中打开 'Accept' 或 'Require' 客户端证书时出现此类错误的经历?它似乎适用于我为我的服务 运行 所在的两个负载平衡服务器配置客户端证书的任何文件夹或应用程序。任何帮助将不胜感激。

好的,最后问题出在负载均衡器配置上。显然 netscaler 正在处理 SSL 握手本身,因此 IIS 的 CertificateRequest 从未到达客户端(Wireshark 没有找到 CertificateRequest 很明显)并且相反,客户端发送的任何客户端证书也从未到达 IIS。

解决方案是在 netscaler 上将负载平衡协议从 SSL 更改为 SSL_Bridge。