我正在使用 C#、带有 WCF 的 asp.net 应用程序。
我已经创建了一个客户端证书 (Client.pfx) 并安装在我的机器上,并以当前用户身份安装。然后我在我的 WCF 托管机器上创建并安装了一个服务器证书 (Server.pfx)。现在我需要通过将客户端和服务器证书匹配在一起来从客户端进行身份验证。如果存在匹配,则必须允许访问 WCF 内部的方法。如何做到这一点?
我正在使用 C#、带有 WCF 的 asp.net 应用程序。
我已经创建了一个客户端证书 (Client.pfx) 并安装在我的机器上,并以当前用户身份安装。然后我在我的 WCF 托管机器上创建并安装了一个服务器证书 (Server.pfx)。现在我需要通过将客户端和服务器证书匹配在一起来从客户端进行身份验证。如果存在匹配,则必须允许访问 WCF 内部的方法。如何做到这一点?
您不必编写代码来执行证书身份验证 - 这可以通过配置来处理。
从这篇文章:
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>
Praveen,您所说的是客户端证书身份验证。有很多关于此的文章,但基本上您在使用客户端证书身份验证时有两个身份验证选项:
一种称为 ChainTrust,这意味着客户端证书具有在主机上找到的证书作为其证书颁发机构 (CA) 的基础。
另一个选项称为 PeerTrust,这意味着客户端身份验证证书具有在主机上的 LocalMachine\TrustedPeople 存储中的主机上找到的副本。
或者您可以使用 PeerOrChainTrust,这意味着如果 Chain 或 Peer 信任为真,则允许客户端进入。
这是一个巨大的话题——对于这个小论坛来说太大了,但这是一个很好的起点,供您开始:
这是一个链接;http://msdn.microsoft.com/en-us/library/ff650785.aspx