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

时间:2016-07-23 12:16:22

标签: c# web-services ssl certificate client-certificates

我们一直试图解决问题。

我们使用带有客户端证书的Web服务。

服务所有者向我们提供了一个.p12文件,它包含客户端证书以及CA和私钥。

我们可以从证书本身看到证书路径。

问题是,当我们尝试通过SOAP UI调用Web服务时,它可以工作。在SOAPUI中,我们选择.p12文件作为密钥库并设置密码。它有效。

enter image description here

当我们尝试通过.net客户端应用程序调用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

所以我的问题是我们如何设法使用我们的请求(如.Net中的SOAP UI)发送CA根目录?

如果有人能对这个问题有所了解,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

可能就像在服务器上安装中间CA证书一样简单,以便第二个客户端无需发送它。

它也可以像在本地计算机(或用户)的Windows证书存储中的客户端上安装中间CA证书一样简单,以便在构建客户端证书链时可用。

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