通过将客户端和服务器证书匹配在一起来验证WCF

时间:2013-07-19 12:03:38

标签: c# asp.net .net wcf x509certificate

我正在使用带有WCF的C#,asp.net应用程序。

我已经创建了一个客户端证书(Client.pfx)并安装在我的机器下当前用户下。然后我在我的WCF托管机器中创建并安装了服务器证书(Server.pfx)。现在我需要通过将客户端和服务器证书一起匹配来从客户端进行身份验证。如果存在匹配,则必须允许访问WCF内的方法。怎么做到这一点?

2 个答案:

答案 0 :(得分:0)

您不必编写代码来执行证书身份验证 - 这可以通过配置来处理。

从这篇文章:

http://msdn.microsoft.com/en-us/library/ff648360.aspx

有多种方法可以指定证书的位置。此示例使用服务的证书存储:

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
       <serviceMetadata httpGetEnabled="true" />
       <serviceDebug includeExceptionDetailInFaults="false" />
       <serviceCredentials>
           <serviceCertificate findValue="CN=tempCertServer" />
       </serviceCredentials>
    </behavior>
  </serviceBehaviors>

这个是使用直接在配置文件中编码的证书:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="NewBehavior">
                <clientCredentials>
                    <clientCertificate findValue="CN=tempCertClient"/>
                </clientCredentials>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    ...
    <client>
        <endpoint address="http://<<service address>>"
            behaviorConfiguration="NewBehavior" binding="wsHttpBinding"
            bindingConfiguration="wsHttpEnpoint1" contract="ServiceReference1.IService"
            name="wsHttpEndpoint">
            <identity>
                <certificate encodedValue="<<Encode Value>>" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>

答案 1 :(得分:0)

您所说的Praveen是客户端证书身份验证。有很多关于此的内容,但在使用客户端证书身份验证时,基本上您有两种身份验证选项:

一个名为ChainTrust,这意味着客户端证书具有作为其证书颁发机构(CA)基础的主机上的证书。

另一个选项称为PeerTrust,这意味着客户端身份验证证书在主机上的LocalMachine \ TrustedPeople存储中的主机上找到了副本。

或者您可以使用PeerOrChainTrust,这意味着如果Chain或Peer信任为真,则允许客户端进入。

这是一个很大的话题 - 对于这个小论坛来说太大了,但这是一个很好的起点,你可以从这开始:

这是一个链接; http://msdn.microsoft.com/en-us/library/ff650785.aspx