如何从.NET客户端发送多个证书(包括根CA)

4
我们一直在努力解决一个问题。
我们使用客户端证书消耗Web服务。
服务提供商给了我们一个.p12文件,其中包含客户端证书、CA和私钥。
我们可以从证书本身看到认证路径。
问题是,当我们尝试通过SOAP UI调用Web服务时,它可以工作。在SOAPUI中,我们选择.p12文件作为密钥库并设置密码。它可以工作。

enter image description here

当我们尝试通过我们的.NET客户端应用程序调用Web服务时,它无法工作。
--这是我们调用Web服务的方式
        channelFactory = new ChannelFactory<AcquisitionAutorisationService>(binding, serviceAddress);
        channelFactory.Credentials.ClientCertificate.Certificate = new X509Certificate2();
        channelFactory.Credentials.ClientCertificate.Certificate.Import(@"C:\cert\abc.p12", "password", X509KeyStorageFlags.DefaultKeySet);

当我们使用WireShark监测包时,发现SOAPUI在请求中发送了两个证书,即客户端证书和证书颁发机构。

enter image description here

但是 .Net 客户端只发送客户端证书而不发送 CA。因此服务器的防火墙不允许我们的调用。

enter image description here

我的问题是,为什么我们能够像SOAP UI和.Net一样发送CA根证书?如果有人能够提供任何关于这个问题的想法,我将不胜感激!

还没有答案吗?你找到解决方案了吗?我也遇到了类似的问题。 - Iúri dos Anjos
1个回答

0
如果第一个客户端(SOAP UI)正在发送CA证书,则它必须是由另一个CA签名的中间CA证书。客户端没有任何理由发送根CA证书。

最简单的方法可能是在服务器上安装中间CA证书,以便第二个客户端无需发送它。

也可以将中间CA证书安装在客户端的Windows证书存储区中,以便在构建客户端证书链时可用于本地计算机(或用户)。

否则,我很确定你要找的是如何让.NET在客户端证书链中发送中间 CA证书。


谢谢您的回答。中间CA证书实际上已经安装在客户端Windows证书存储中。但我想知道的是,SOAPUI和.NET客户端之间的区别是什么?因为这两个应用程序都使用相同的.p12文件。(抱歉,我不是专家,可能表达问题不正确) - Fatih Yarbaşı
我不知道这两个特定客户端之间的区别,但是例如,如果您编写基于openssl的客户端,取决于您进行哪些API调用,openssl将或不会将中间证书添加到链中。这完全取决于API,以及您对该API进行了哪些调用。 - Jim Flood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接