我们一直试图解决问题。
我们使用带有客户端证书的Web服务。
服务所有者向我们提供了一个.p12文件,它包含客户端证书以及CA和私钥。
我们可以从证书本身看到证书路径。
问题是,当我们尝试通过SOAP UI调用Web服务时,它可以工作。在SOAPUI中,我们选择.p12文件作为密钥库并设置密码。它有效。
当我们尝试通过.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在请求中发送了两个证书,包括客户端证书和证书颁发机构。
但是.Net客户端只发送客户端证书而不是CA.所以服务器的防火墙不允许我们的电话。
所以我的问题是我们如何设法使用我们的请求(如.Net中的SOAP UI)发送CA根目录?
如果有人能对这个问题有所了解,我将不胜感激!
答案 0 :(得分:0)
如果第一个客户端(SOAP UI)正在发送CA证书,则它必须是由另一个CA自己签名的中间CA证书。客户端没有任何理由发送根CA证书。
可能就像在服务器上安装中间CA证书一样简单,以便第二个客户端无需发送它。
它也可以像在本地计算机(或用户)的Windows证书存储中的客户端上安装中间CA证书一样简单,以便在构建客户端证书链时可用。
否则,我很确定您正在寻找的是如何让.NET在客户端证书链中发送中间 CA证书。