客户端是否需要WCF中的用户名验证证书

时间:2012-11-20 07:29:12

标签: c# .net wcf web-services certificate

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

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

<authentication certificateValidationMode="None" /> 

在服务器端。这是对的吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 从受信任的证书颁发机构购买一个。
  2. 自己成为证书颁发机构并创建证书。除非你控制谈话的两个方面,否则这不是很有用。如果您决定为自己创建证书,则可以使用MakeCertPvk2PfxOpenSSL创建链式加密证书。看看使用OpenSSL的how-to article。最后但并非最不重要的是请注意,您应该将私钥保存在安全的位置。
  3. 现在您应该拥有以下文件(这些名称仅用于演示目的):

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

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

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

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

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

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

    <authentication certificateValidationMode="ChainTrust"/> 
    

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