ssl - 无法创建 SSL/TLS 安全通道 : Client certificates, TomCat 和 .Net

标签 ssl .net-4.0 client-certificates

我遇到了许多人报告的客户端证书问题,但我所看到的解决方案都对我不起作用。我有一个用 VB.Net 编写的客户端(使用 VS 2010 和 .Net framework 4.0),它需要连接到在 Apache Tomcat/5.0.27 上运行的 Web 服务。当不需要客户端证书时,它在 SSL 上运行良好,但是一旦需要客户端证书,它就会失败并显示“请求被中止:无法创建 SSL/TLS 安全通道”

在启用 SSL 时(通过在系统中设置 sslProtocol="TLS"secure="true"scheme="https"在 Tomcat 上配置),使用 Internet Explorer(8、9 和 10,在 XP 和 Win7x32 上)对其进行测试。 xml 文件),但客户端证书被禁用(clientAuth="false"),在客户端 PC 上安装 CA 证书和服务器证书后,IE 很高兴。 (IE 会在没有证书的情况下提示,但您可以告诉它忽略警告。安装证书后,它会在没有任何警告的情况下连接。)当需要客户端证书时 (clientAuth="true"),IE 将不会连接。我导入客户端证书文件后,还是连接不上。 IE 显示客户端文件已安装,并显示证书正常并且信任 CA,但它显示在似乎错误的存储区:中间证书颁发机构,并且未在目的下勾选客户端身份验证。 MMC 证书管理单元显示客户端证书位于个人 - 当前用户存储中。

该证书是由 Web 服务的所有者颁发给我们的,因此理论上它必须有效。属性看起来没问题,目的显示“所有应用程序策略”。

我需要让它与我的 .Net 客户端一起工作。我使用 Web Reference 创建到 Web 服务的连接。我设置 PreaAuthenticate=True,并将证书文件附加到 Web 引用,并且可以在 IDE 中看到它附加。使用网络监视器,我可以看到服务器向客户端发送证书(在两个大数据包中),但客户端似乎没有向服务器发回任何证书。

我尝试了各种建议,例如设置 ServicePointManager.Expect100Continue = true 和 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但这没有区别。

我已禁用防火墙和代理服务器,因此应该没有任何东西阻止流量。

如果有任何帮助,我将不胜感激。

最佳答案

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

OpenSsl 中的步骤是创建私钥文件 (client.key)、创建证书请求 (client.req)、签署 key (client.pem) 然后将其导出 (client.pfx)。

关于ssl - 无法创建 SSL/TLS 安全通道 : Client certificates, TomCat 和 .Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16010288/

相关文章:

.net-4.0 - 好的 .net4 分析器

C# 调试 - 在不知道哪个属性具有它的情况下寻找某个值

c# - 客户端证书 - 403 - 禁止 : Access is denied

c# - 如何从服务器 SSL 证书获取机器名

http - 启用 SSL 的站点和链接

asp.net - 如何将 Windows 用户(而不是服务帐户)登录到数据库?

tls1.2 - .Net Framework 4.8 支持 SNI 吗?

c# - 如何从客户端证书中读取通用名称?

c# - WCF DualHTTPBINDING 消息安全

ssl - 配置错误 : Elastic Load Balancer + EC2 + Route 53