相互身份验证(WCF 客户端连接到 SOAP 服务)因一个客户端证书而失败,但因另一个客户端证书而成功(但两个证书都在服务器端受信任)

相互身份验证(WCF 客户端连接到 SOAP 服务)因一个客户端证书而失败,但因另一个客户端证书而成功(但两个证书都在服务器端受信任)

设置:.NET (4.6) 客户端应用程序通过 HTTPS 连接到远程 SOAP 服务。远程服务可以配置为需要客户端证书或不需要。

我所寻找的答案是任何可能解释为什么场景#2会失败...以下3种场景都使用完全相同的代码库进行测试,只更改所涉及的证书以及服务是否需要客户端证书。

场景 #1 - 不需要客户端证书

  • 客户端连接成功

场景 #2 - 需要客户端证书,使用证书 A

  • 证书 A 安装在客户端的 Windows 中(本地计算机存储)
  • 证书有效,2048 位,非通配符,已成功用于另一项不相关服务中的服务器身份验证,由 GoDaddy 安全证书颁发机构 - G2 颁发
  • 证书与远程方共享,远程方似乎知道自己在做什么
  • 当客户端尝试请求时,握手失败。在客户端,.NET 异常为“请求已中止:无法创建 SSL/TLS 安全通道。”。在服务器端,错误为“客户端无法出示证书”。

场景 #3 - 需要客户端证书,使用证书 B

  • 除了使用不同的客户端证书外,其他一切都与 #2 完全相同 (B)
  • 证书有效,2048 位,通配符,已成功用于另一项不相关服务中的服务器身份验证,由 GeoTrust RSA CA 2018 颁发
  • 客户端连接成功

从日志中我们可以看到,在场景#2和#3中,客户端和服务器都协商使用 TLS 1.2。

多次运行上述操作并检查所有内容后,我唯一的结论是证书 A 在某种程度上与设置不兼容 - 要么是 .NET 客户端决定不提供它,要么是服务无法接受它。但可能有什么不同/缺失呢?

相关内容