我遇到了许多人报告的客户端证书问题,但我见过的解决方案都没有为我工作。我有一个在 VB.Net 中编写的客户端(使用 VS 2010 和 .Net 框架 4.0),它需要连接到在 Apache Tomcat/5.0.27 上运行的 Web 服务。当不需要客户端证书时,它可以与 SSL 一起正常工作,但一旦需要客户端证书,它就会失败并显示“请求已中止:无法创建 SSL/TLS 安全通道”</p>
在启用 SSL 时使用 Internet Explorer(8、9 和 10,在 XP 和 Win7x32 上)进行测试(通过在 system.xml 文件中设置 sslProtocol="TLS" secure="true" scheme="https" 在 Tomcat 上进行配置) ,但是客户端证书被禁用(clientAuth="false"),在客户端PC上安装CA证书和服务器证书后,IE很高兴。(如果没有证书,IE 会报错,但你可以告诉它忽略警告。安装证书后,它会在没有任何警告的情况下连接。)当需要客户端证书时(clientAuth="true"),IE 将无法连接。在我导入客户端证书文件后,它仍然无法连接。IE 显示客户端文件已安装,并显示证书正常且信任 CA,但它显示在似乎是错误的商店:中间证书颁发机构,并且客户端身份验证未在用途下打勾。MMC 证书管理单元显示客户端证书位于个人 - 当前用户存储中。
该证书是由 Web 服务的所有者颁发给我们的,因此理论上它必须有效。属性看起来不错,目的显示“所有应用程序策略”。
我需要让它与我的 .Net 客户端一起使用。我使用 Web 引用来创建到 Web 服务的连接。我设置 PreaAuthenticate=True,并将证书文件附加到 Web 参考,并且可以在 IDE 中看到它附加。使用网络监视器,我可以看到服务器将证书发送给客户端(在两个大数据包中),但客户端似乎没有将任何证书发送回服务器。
我尝试了各种建议,例如设置 ServicePointManager.Expect100Continue = true 和 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但这并没有什么区别。
我已经禁用了防火墙和代理服务器,所以不应该阻止流量。
我会很感激任何帮助。