【问题标题】:Can you define what certificate a WCF Service uses?你能定义 WCF 服务使用什么证书吗?
【发布时间】:2015-09-10 00:08:45
【问题描述】:

我们有多个程序针对一个 WCF 服务。当客户端发送消息时,他们可以同时定义客户端证书和服务证书。做签名和加密。据我所知,服务可以在启动时同时设置。但我发现服务如何根据每个请求检查证书的困难。

如果程序 A 使用证书而程序 B 使用不同的证书。有没有办法告诉 WCF 如何在不使用 Windows 证书存储的情况下查找这些证书?我知道如何从文件中加载 X509Certificate2,但似乎无法找到需要覆盖的部分来告诉它根据传入的内容使用特定的证书。到目前为止我所做的一切都在寻找该客户证书证书存储。业务规则宁愿我们将它们放在我们正在加密的其他地方。我希望程序 A 请求使用一个文件,程序 B 请求使用另一个我可以指定的文件。

【问题讨论】:

  • 当您说客户端证书时,您是指客户端用来向服务证明其身份的证书吗?当您说服务证书时,您是指 WCF 服务用来向客户端证明其身份的证书吗?
  • SSL 证书的性质应该可以为您解决这个问题。如果您为您的程序提供不同的证书并让它们在调用您的服务时使用不同的证书,那么一切都会正常工作。只要它们是由同一受信任的根颁发机构颁发的。
  • @YacoubMassad 是的,这就是我所说的这些术语的意思。
  • @fanuc_bob 我们刚刚开始使用 WCF,但我们将使用 100 多个程序,因此我们不想通过在 MMC 中安装它们来管理证书。我们希望以另一种方式做到这一点。但这取决于我们是否脱离 MMC。

标签: wcf wcf-security


【解决方案1】:

为了进行客户端身份验证,您实际上需要一个证书 + 一个私钥,即,不仅仅是一个证书。

您需要一个包含证书及其对应私钥的.PFX 文件。 PFX 受密码保护。

这是一个示例代码:

Client client = new Client();

var cert = new X509Certificate2(File.ReadAllBytes("c:\\certificate_with_key.pfx"), "pfx_password");

client.ClientCredentials.ClientCertificate.Certificate = cert;

【讨论】:

  • 我们遇到的问题是我们正在创建证书并使用工具将它们安装到 CertStore 并且私钥无法导出。当我们尝试导出 pfx 文件并将其用作文件参考时,pfx 文件缺少私钥。
猜你喜欢
  • 2010-12-06
  • 2012-08-06
  • 2015-05-24
  • 2014-05-11
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多