WCF X.509证书验证提高安全级别

开发 开发工具
今天我们将会在这里为大家详细介绍一下有关WCF X.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证书验证找出来,提供给服务,不然就要抱错。

责任编辑:曹凯 来源: 博客园
相关推荐

2013-08-30 10:54:53

2009-02-23 20:31:31

计算机英语短文X.509

2010-04-14 09:38:49

Windows SerIE安全级别

2009-09-04 16:21:37

Ruby on Rai

2011-12-09 09:31:58

桌面虚拟化

2013-07-18 11:00:59

山石网科

2013-04-25 10:11:12

托管虚拟桌面HVDGartner

2022-03-18 10:23:11

元宇宙ARVR

2022-08-16 12:09:21

身份验证MFA

2009-12-22 18:52:06

WCF安全性

2013-10-22 10:24:05

2011-08-19 12:17:46

2010-09-16 09:33:14

无线路由器

2015-07-28 14:00:46

云整合云安全

2011-08-11 11:08:09

2017-12-08 21:26:52

物联网DDI安全性

2020-04-01 11:38:13

物联网安全微分段IOT

2019-06-17 08:43:46

安全测试网络安全攻击

2009-11-16 16:25:36

2016-06-03 10:32:53

点赞
收藏

51CTO技术栈公众号