WCF 匿名客户端证书安全验证

之前介绍过X.509证书的一些知识,http://xiaogangblog.com/archives/224 可以参考这篇.

本篇要介绍的是 匿名客户端证书验证,简单的说就是 服务器端提供证书签名, 客户端匿名调用.

匿名客户端验证有什么用?可以建立相对安全的链接,对于一些不是很重要的数据传输。避免了每次让客户端都验证证书的麻烦。也可结合前文讲的自定义用户名密码来提升安全级别。

(现在的购买正规的证书服务还是很贵滴)

建立服务端

代码很简单:

[ServiceContract] public interface IService1 { [OperationContract] string GetData(CompositeType type); } namespace WcfServiceDemo2 { public class Service1 : IService1 { public string GetData(CompositeType type) { return type.StringValue + "测试成功!"; } } }

默认的代码,主要看配置文件:

<system.serviceModel> <bindings> <wsHttpBinding> <binding name="x509Binding" > <security mode="Transport"> <transport clientCredentialType="None"/> </security> </binding> </wsHttpBinding> </bindings> <services> <service name="WcfServiceDemo2.Service1" behaviorConfiguration="x509Binding"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="x509Binding" name="Service1" contract="WcfServiceDemo2.IService1"> </endpoint> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="x509Binding"> <serviceMetadata httpsGetEnabled="True" /> <serviceDebug includeExceptionDetailInFaults="True" /> <serviceCredentials> <serviceCertificate x509FindType="FindBySubjectName" findValue="MyServer" storeLocation="LocalMachine"/> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer>

<serviceCertificate x509FindType="FindBySubjectName" findValue="MyServer" storeLocation="LocalMachine"/>

配置证书的名称,以及存放位置.

Binds节点:

<security mode="Transport">
          <transport  clientCredentialType="None"/>
  </security>

改成传输安全模式,因为是匿名客户端,所以这里clientCredentialType设置成None,忽略客户端证书

客户端代码就不写了,在VS2010里面直接添加服务器端引用,就可以.在添加之前我们先把这个服务端的WCF部署到测试机上.

WCF部署

首先发布出来的文件包括一个svc文件bin文件,以及web.config

为了做测试我在windows server2008 和winddows server2003上各做了测试,两者没啥太大的区别,这里以2003为例子:

新建网站,将站点部署上去:

确保IIS和WCF配置正确,

注册WCF:

C:\WINDOWS\Microsoft.NET\Framework\v3.0\WindowsCommunication Foundation>ServiceModelReg.exe /i /x

注册IIS:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe –i

如果出现IIS 访问404 记得勾选WEB扩展里面的ISAPI扩展 ,以及开启.netframwork

按后确保WCF文件可以访问.

配置证书服务,在 win2003下开启证书服务之后会自动在默认网站下创建一个asp的证书服务站点.

注:此处如果没有自动创建该站点,也许是你的默认网站已经删除,或者没有开始以80端口的网站。

然后访问:https://localhost/certsrv/default.asp 就可以看到页面了。

详细的证书申请请参照如下网站

创建开发期间的临时证书http://msdn.microsoft.com/zh-cn/library/ms733813.aspx

这个是通过命令行来创建,其实现在可以直接用可视化窗口来创建了。

详细的证书创建步骤:http://www.cnblogs.com/yjmyzz/archive/2008/08/21/1273201.html

下面提供一个免费的SSL证书申请的网站:http://www.startssl.com/

这里是详细的教程 http://blog.s135.com/startssl/

最后记得开启IIS的SSL访问:

4

因为我是匿名客户端访问,可以忽略客户端证书。

然后用https://  来访问我们的服务就可以了。

这样客户端访问的时候使用vs2010默认给我们生成好的web.config 就可以了.

 

本篇博客同步发布在我的博客http://xiaogangblog.com/archives/289.欢迎转载.

 

posted on 2011-08-24 18:47  小刚qq  阅读(1988)  评论(0编辑  收藏  举报