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