0

当在带有 WCF 的 wsHttpBinding 上使用用户名认证时,客户端是否需要安装证书,还是仅在主机上需要?在任何情况下,此证书是否需要由第三方签名,或者它也可以与自签名证书一起使用?

我的理解是我可以使用自签名证书并设置

<authentication certificateValidationMode="None" /> 

在服务器端。这个对吗?

还有一件事情。如果我使用自签名证书,我是否需要将证书放在任何特定的商店中,还是都一样?- 对自己的回答:只要在代码中设置了正确的商店,商店并不重要。

4

1 回答 1

1

WCF 不允许没有传输模式安全性的用户名身份验证,这意味着您需要证书。

据我所知,有两种方法可以获得正确的证书:

  1. 从受信任的证书颁发机构购买一个。
  2. 自己成为证书颁发机构并创建证书。除非您控制对话的双方,否则这不是很常用。如果您决定制作自己的证书,您可以使用MakeCertPvk2PfxOpenSSL创建链式加密证书。查看这篇使用 OpenSSL的操作指南文章。最后但并非最不重要的一点是,您应该将私钥保存在安全的位置。

现在您应该有以下文件(名称用于说明目的):

  • server.cer(服务器的公钥)
  • server.pfx(服务器的密钥交换文件)
  • client.cer(客户端的公钥)
  • client.pfx(客户端的密钥交换文件)

然后您可以执行以下操作:

  • 在服务器上,在本地计算机证书存储中:

    1. 将 server.pfx 导入个人文件夹。这将允许服务器使用其私钥加密消息并解密已使用其公钥加密的消息。
    2. 将 client.cer 导入到 Trusted People 文件夹。这将允许服务器使用客户端的公钥加密消息并解密使用客户端的私钥加密的消息。
  • 在客户端上,在本地计算机证书存储中:

    1. 将 client.pfx 导入个人文件夹。这将允许客户端使用其私钥加密消息并解密已使用其公钥加密的消息。
    2. 将 server.cer 导入到 Trusted People 文件夹。这将允许客户端使用服务器的公钥加密消息并解密已使用服务器的私钥加密的消息。

最后在客户端和服务集的配置文件上:

<authentication certificateValidationMode="ChainTrust"/> 

这将确保只有可以链接到受信任的根存储中的证书颁发机构的证书才有效。

于 2012-12-08T01:00:22.617 回答