WCF NetTcpBinding Transport安全模式(6) ClientCredentialType证书验证模式---- PeerTrust验证模式

WCF NetTcpBinding Transport安全模式(6)    ClientCredentialType证书验证模式---- PeerTrust验证模式

当证书验证模式设置为“PeerTrust”时,服务端或者客户端会验证证书是否存在于TrustedPeople 证书存储区中。

修改配置文件采用“PeerTrust”验证模式如以下代码。

在服务端设置对客户端的验证模式设置为“PeerTrust”:

           <clientCertificate >

              <certificate findValue="XuanhunClient"

                            storeLocation="CurrentUser"

                            storeName="My"

                            x509FindType="FindBySubjectName"/>

     <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser"  />

            </clientCertificate>

在客户端设置对服务端验证模式设置为“PeerTrust”:

   <serviceCertificate >

    <defaultCertificate 

                 x509FindType="FindBySubjectName"

                storeLocation="CurrentUser"

              storeName="My"

                findValue="XuanhunServer"

                />

<authentication certificateValidationMode="PeerTrust"  />

            </serviceCertificate>

在运行程序之前,先来看看前面生成证书目前存放在哪里。启动mmc控制台,添加新管理单元,选择证书,然后添加当前用户和本地计算机两个节点,如图11-14所示。

图11-14               添加证书管理单元

添加管理单元之后,查看当前用户下各类证书,如图11-15所示。

图11-15        查看证书

在图11-15中可以看到,生成证书“XuanhunClient”和“XuanhunServer”在当前用户个人存储区中,不在受信任人存储区中。

运行服务端和客户端,在客户端报出异常,如图11-16所示。

图11-16        证书不在被信任人存储区中

从图11-16异常信息可以明显地看出,如果证书不在受信任人存储区中,采用“PeerTrust”验证模式时是无法通过验证。有没有办法将这两个证书放到受信任人证书存储区中呢?其实很简单,只需要在证书管理单元中将两个证书拖拽到受信任人存储区中即可,如图11-17所示。

图11-17        将证书添加到受信任人存储区

现在运行程序,是不是就可以通过验证了呢?还不行,不要忘记修改配置文件中storeName”属性为“TrustedPeople”。

修改客户端“storeName”属性:

 <clientCertificate

               findValue="XuanhunClient"

                storeLocation="CurrentUser"

                x509FindType="FindBySubjectName"

                storeName="TrustedPeople"/>

修改服务端“storeName”属性:

    <serviceCredentials >

            <serviceCertificate

               x509FindType="FindBySubjectName"

                storeLocation="CurrentUser"

                storeName="TrustedPeople"

                findValue="XuanhunServer"

             />

 </serviceCredentials>

运行测试程序,结果如图11-18所示。

图11-18        PeerTrust”验证模式运行结果

11-18 所示为客户端显示结果,说明客户端和服务端证书已经通过相互验证。

 ------------------------------注:本文部分内容改编自《.NET 安全揭秘》

posted @ 2012-06-24 15:18  玄魂  阅读(2232)  评论(0编辑  收藏  举报