WCFX.509证书验证提高安全级别

在WCF中,有一种验证机制是通过证书来进行的。这种安全机制可以为我们打造一个安全性非常高的解决方案。在这篇文章中,我们将会为大家详细介绍一下WCF X.509证书验证的相关应用方法。#t#

最近在配WCF X.509证书验证,我想在服务端实现SSL加密,然后当客户端调用服务时,需要出示自己的数字证书以证明自己是合法的用户。配置过程很麻烦,不像书上说的那样。我总结了一下有如下几点需要注意。

在IIS部分,对于有服务器证书的WCF服务站点,可以要求SSL连接,128位加密,但是不能要求客户端证书。在WCF服务部分,不能使用wsDualHttpBinding,应为它一个通道SSL,另一个通道不能保证安全,在服务运行时会抱错。

配置过程大致有以下几步:

1。配置IIS SSL服务器证书

2。获取并设置客户端证书

3。配置WCF的服务端和客户端

上述第1步,涉及到IIS的应用,不是本文重点,相信玩过IIS和证书颁发机构的朋友都不陌生,不做叙述了。第2步的中获取证书也是比较容易的,配置证书就比较麻烦,新证书一般默认安装到本机的Current_User\My下,非系统管理员无法获取其私钥,而WCF客户端又需要获取该证书私钥以向服务端证明自己的身份,而且WCF客户端运行时使用的是非本机管理员帐号,这就导致了WCF会报出无法找到证书的错误。解决这个问题,我们需要使用名为“Windows HTTP 服务证书配置工具”(WinHttpCertCfg.exe) 的工具为证书指定权限。该工具包含在Windows Server 2003 Resource Kit Tools可以到微软下载,地址是:http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96eeb18c4790cffd&displaylang=en 下载好后在命令行类似下面的命令

WinHttpCertCfg.exe -g -c CURRENT_USER\MY -s "Issued_To_name" -a DOMAIN\account

就是说给account帐号赋予获取私钥的权限,可用ASPNET,NETWORKSERVICE等,-s后面是要搜索的条件。在分配完权限后,最好关掉IIS的进程,这样设置生效比较快 ,同样我们也需要配置服务所需的WCF X.509证书验证。

做完了第2步,第3步就好办了,贴一下我的配置服务端

 
 
 
  1. < behaviors> 
  2. < serviceBehaviors> 
  3. < behavior name="MemberServiceBehavior"> 
  4. < serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"> 
  5. < serviceDebug includeExceptionDetailInFaults="false"/> 
  6. < serviceCredentials> 
  7. < serviceCertificate storeName="My" storeLocation="LocalMachine" 
    x509FindType="FindBySubjectName"   
  8. findValue="membershipapi"/> 
  9. < /serviceCredentials> 
  10. < /behavior> 
  11. < /serviceBehaviors> 
  12. < /behaviors> 
 
 
 
  1. < bindings> 
  2. < wsHttpBinding> 
  3. < binding name="wsHttpCredentialBinding"> 
  4. < security mode="TransportWithMessageCredential"> 
  5. < transport clientCredentialType="Certificate"/> 
  6. < message clientCredentialType="Certificate" /> 
  7. < /security> 
  8. < /binding> 
  9. < /wsHttpBinding> 
  10. < /bindings> 

客户端

 
 
 
  1. < behaviors> 
  2. < endpointBehaviors> 
  3. < behavior name="clientCredentialBehavior"> 
  4. < clientCredentials> 
  5. < clientCertificate storeName="My" storeLocation="CurrentUser" 
    findValue="MemberApiClient" x509FindType="FindBySubjectName" /> 
  6. < serviceCertificate> 
  7. < authentication certificateValidationMode="ChainTrust"/> 
  8. < /serviceCertificate> 
  9. < /clientCredentials> 
  10. < /behavior> 
  11. < /endpointBehaviors> 
  12. < /behaviors> 

我这样的配置虽然客户端在不提供WCF X.509证书验证的情况下仍然能够看到服务的元数据终结点(主要是因为IIS没有配置为要求客户端证书),但是在调用服务时如果没有证书,就会抱错,目的基本达到。

最后我想说一下,书上讲authentication certificateValidationMode配置为PreeTrust比较好,只要在信任的人的列表里就可以通过验证,可是经过我的试验似乎不是这样,在我的客户端和服务中,authentication certificateValidationMode值配置为PreeTrust或ChainTrust没有什么区别,客户端都需要将证明自己的WCF X.509证书验证找出来,提供给服务,不然就要抱错。

文章题目:WCFX.509证书验证提高安全级别
地址分享:http://www.shufengxianlan.com/qtweb/news17/463867.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联