我正在连接到托管在 Win2008 (IIS7) 中的 Web 服务,需要基于证书的相互身份验证。当在 .NET 2.0 运行时上运行的客户端调用该服务时,操作会失败并显示 403。如果我在wireshark 中检查请求,我看到客户端正在使用证书帧响应证书请求帧,但没有证书在该框架中指定。查看证书请求中服务器提供的 CA 证书列表客户端证书使用的 CA 不存在。这似乎是有道理的,因为如果服务不信任它,发送证书的意义何在。但是,当我使用针对 .NET 4.0 运行时重新编译的工具进行同样的调用时,行为是不同的。客户端的证书框架确实包含它配置使用的证书。我在MSDN上看到对 SslStream 进行了更改,这就是我遇到的问题吗?不同的运行时版本对同一个服务端点的行为不同,这是相当令人不安的。
问问题
118 次
1 回答
1
是的,运行时的两个版本之间的行为确实发生了变化。细微的变化在于客户端处理证书请求帧的方式。我们遇到的问题是,由于根证书更新错误,服务器在其受信任的根存储中拥有过多的 CA问题。这导致在证书请求帧的证书数组中返回可信 CA 的子集。由于返回 CA 列表是一个适当的子集,它包括在某些请求中而不是在其他请求中签署客户端证书的根。.NET 2.0 客户端通过不包含服务器提供的受信任权限集之外的证书来正确遵守 TLS 规范。.NET 4.0 客户端尊重它的配置方式,并提供了通过 WCF 配置指定的客户端证书。
于 2015-05-14T19:46:36.617 回答