我正在连接到Win2008(IIS7)中托管的Web服务,该服务需要基于证书的相互身份验证。当运行在.NET 2.0运行时的客户端调用该服务时,操作将失败,并显示403.如果我在wireshark中检查请求,我看到客户端正在响应证书请求框架证书框架,但该框架中未指定任何证书。查看服务器在证书申请中提供的CA证书列表,不存在客户端证书使用的CA.这似乎是有道理的,因为如果服务不信任它,发送证书的重点是什么。但是,当我使用针对.NET 4.0运行时重新编译的工具进行相同的调用时,行为是不同的。客户端的证书框架确实包含已配置使用的证书。我在MSDN看到对SslStream进行了更改,所以我遇到了什么?令人不安的是,不同的运行时版本对同一服务端点的行为方式不同。
答案 0 :(得分:1)
是的,两个版本的运行时之间的行为确实发生了变化。细微变化是客户端如何处理证书请求框架。我们遇到的问题是,由于a bad root certificate update问题,服务器在其受信任的根存储中有太多CA.这导致在证书请求帧的证书数组中返回可信CA的子集。由于返回列表CA是适当的子集,因此它包括在某些请求中而不是在其他请求中签署客户端证书的根。 .NET 2.0客户端通过不包括服务器提供的受信任机构集之外的证书来正确地遵守TLS规范。 .NET 4.0客户端尊重它的配置方式并提供通过WCF配置指定的客户端证书。