1

我遇到了许多人报告的客户端证书问题,但我见过的解决方案都没有为我工作。我有一个在 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,但这并没有什么区别。

我已经禁用了防火墙和代理服务器,所以不应该阻止流量。

我会很感激任何帮助。

4

1 回答 1

1

好的,事实证明他们提供的证书有问题,或者它与客户端不兼容。我找到了有关使用 OpenSsl 创建证书的说明,它适用于他们的服务器。他们使用 java 的 keytool 来制作证书,所以要么它创建了一个不兼容的证书,要么他们没有使用正确的程序,而我使用 OpenSsl 的程序是正确的。

OpenSsl 中的步骤是创建一个私钥文件(client.key),创建一个证书请求(client.req),签署密钥(client.pem)然后导出它(client.pfx)。

于 2013-04-15T12:21:14.190 回答