一段时间以来,我们一直试图解决一个问题。
我们使用带有客户端证书的web服务。
服务所有者给了我们一个.p12文件,它包含客户端证书和CA以及私钥。
我们可以从证书本身看到证书路径。
问题是,当我们试图通过SOAP调用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。所以服务器的防火墙不允许我们调用。

所以,我的问题是,为什么我们能够像SOAP一样在.Net中发送CA根呢?
如果有人对这个问题有任何意见,我将不胜感激!
发布于 2016-07-23 18:40:56
如果第一个客户端(SOAP )正在发送CA证书,那么它必须是一个由另一个CA自己签名的中间CA证书。客户端将没有任何理由发送根CA证书。
它可以简单到在服务器上安装中间CA证书,这样第二个客户端就不需要发送它了。
它也可以像在Windows证书存储区中为本地计算机(或用户)在客户端上安装中间CA证书一样简单,以便在构建客户端证书链时可用。
否则,我很确定您要寻找的是如何让.NET在客户端证书链中发送中间CA证书。
https://stackoverflow.com/questions/38541693
复制相似问题