分类: 嵌入式
2012-06-24 15:19:55
当证书验证模式设置为“PeerTrust”时,服务端或者客户端会验证证书是否存在于TrustedPeople 证书存储区中。
修改配置文件采用“PeerTrust”验证模式如以下代码。
在服务端设置对客户端的验证模式设置为“PeerTrust”:
<clientCertificate >
<certificate findValue="XuanhunClient"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindBySubjectName"/>
<authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" />
clientCertificate>
在客户端设置对服务端验证模式设置为“PeerTrust”:
<serviceCertificate >
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 安全揭秘》