WCF security X509证书2012-01-04 博客园 刘将1. Transfer SecurityTransfer Security 主要包括三个方面: "消息完整性(Message Integrity)"、"消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)"。消息完整性必须确保消息在传输过程中没有被篡改,接收的消息是完整且正确的;消息机密性必须确保消息不会被任何第三方查阅,消息内容不会泄漏给任何非相关人员;而交互认证则是指客户端和服务器必须通过某种信任机制才能建立正确的连接,同时交互认证还要监测并阻止拒绝服务攻击(DOS)。通常的做法是对消息进行数字签名来确保其完整性,使用非对称加密算法来阻止消息内容外泄,而用户名/密码、X.509 数字证书等方式则可以用来验证对方身份,在这里我们主要讲述如何在WCF中使用用户名/密码的身份验证方式.2. x.509数字证书验证:在上一篇blog中我们讲述了使用userName/password方式来验证身份,http://www.cnblogs.com/liujiang/archive/2008/11/21/1338384.html.现在我们来讲述一下如何使用X.509证书的方式来验证.首先让我们先了解一下X.509证书的相关技术.。X.509是由国际电信联盟(ITU-T)制定的数字证书标准。X.509是一种基于公开密钥体制的鉴别业务密钥管理,拥有证书的用户都有两把密钥,一把叫公钥,一把叫私钥.私钥的保密性很高,一般情况下只用户本人知道.公钥是是其他用户都可利用的公共密钥.比如说我们的server有Temp的数字证书.我们Client端就可以使用Server的公钥对消息进行加密并发送消息给Server端,然后server端通过私钥来解密消息.凡是被公钥加密过的消息一般情况下只能由私钥来解密,可见私钥的重要性所在.在WCF userName/password中就是使用公钥来加密用户名和密码的.下面我们谈谈在WCF中使用X.509认证方式。WCF的服务端和客户端之间,如果不作任何安全处理(即服务端的<security mode="None">),则所有传输的消息将以明文方传输,在internet/intranet环境下是很不安全的,这就是用证书的目。当我们使用UserName方式,通常每次都要从数据库读取用户名/密码信息进行验证,比较麻烦,开销也大.所以在我们也可以使用x.509方式来验证.下面我们以一个Demo来说明如何使用x.509的身份验证方式.使用vs2008的tool中的command命令下执行:makecert -r -pe -n "CN=client" -ss My -sky exchange .makecert -r -pe -n CN=client" -ss My -sky exchange.我们就可以为服务器生成client的证书.如下图所示.