【问题标题】:Authenticate WCF by matching client and server certificate together通过将客户端和服务器证书匹配在一起来验证 WCF
【发布时间】:2013-07-19 20:24:20
【问题描述】:

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

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

【问题讨论】:

  • 您能否详细说明“匹配证书”的含义?两台机器有相同的证书吗?
  • 要从客户端应用程序验证 WCF,我们需要匹配是否在 WCF 托管服务器中配置了相同的证书。因此,如果配置的服务器和客户端证书相同,那么服务就会被认证。

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


【解决方案1】:

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

来自这篇文章:

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>

【讨论】:

  • 这是用于 WCF web.config 文件的吗?
  • 是的 - 是的。理解证书是一个很大的话题——你要做的不仅仅是从这里复制和粘贴某人的答案。我建议阅读一些有关证书和 WCF 配置的内容。
【解决方案2】:

Praveen,您所说的是客户端证书身份验证。有很多关于这方面的文章,但基本上你在使用客户端证书身份验证时有两个身份验证选项:

一种称为 ChainTrust,这意味着客户端证书以在主机上找到的证书作为其证书颁发机构 (CA) 的基础。

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

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

这是一个很大的话题——对于这个小论坛来说太大了,但这是一个很好的起点:

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

【讨论】:

  • 我的情况是从客户端创建一个证书并将该证书的副本发送到 WCF 托管方以供批准,就像 First Data API 一样。那么我需要采用什么方法呢?
  • 你所说的这种方法对我来说是新的。我使用的开发模型允许 WCF 服务根据客户端具有的与主机上找到的证书匹配的证书(基于我在回答中概述的内容)向主机验证客户端。你所说的听起来更像是一个证书注册过程……我不知道你是怎么做到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多