【问题标题】:How to send multiple (including root CA) certificates from .net client如何从 .net 客户端发送多个(包括根 CA)证书
【发布时间】:2016-07-23 12:16:21
【问题描述】:

一段时间以来,我们一直在尝试解决一个问题。

我们使用带有客户端证书的 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 根?

如果有人能就这个问题提供任何想法,我将不胜感激!

【问题讨论】:

  • 还是没有答案?你找到解决办法了吗?我也有类似的问题

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回答。中间 CA 证书实际上安装在客户端 Windows 证书存储中。但我想知道的是,是什么造成了 SOAPUI 和 .net 客户端之间的差异?因为两个应用程序都使用相同的 .p12 文件。 (对不起,我不是这些认证问题的专家,我可能会错误地表达问题)
  • 我不知道这两个特定客户端之间的区别,但是例如,如果您要编写基于 openssl 的客户端,则取决于您进行的 API 调用,openssl 将添加或不会添加链的中间证书。这完全取决于 API,然后是您对该 API 进行的调用。
猜你喜欢
  • 2014-11-09
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 2011-05-04
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多