Message安全模式基于消息保护,强制客户端和服务端提供证书,服务端对返回的消息体进行加密。本节笔者更换服务端的证书,名为XuanhunServer1。
首先我们在服务端配置Message安全模式,如代码清单11-106所示。
代码清单11-106 配置Message安全模式
<bindings>
<basicHttpBinding>
<binding name="basicBindingConf">
<security mode="Message">
<message
clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
在代码清单11-106中,我们启用Message安全模式并设置客户端凭据类型为Certificate。证书的设置和上节相同我就不重复了。客
户端配置主要注意两个地方,一是不论是否验证服务端证书都要提供服务端证书的配置,如代码清单11-107所示。二是要设
置<identity>节中DNS值和服务端证书名称一致,如代码清单11-108所示。
代码清单11-107 客户端证书设置
<clientCredentials>
<clientCertificate
findValue="XuanhunClient"
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectName"/>
<serviceCertificate>
<authentication
certificateValidationMode="None"/>
<defaultCertificate
findValue="XuanhunServer1" storeName="TrustedPeople"
x509FindType="FindBySubjectName" storeLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
代码清单11-108 设置DNS
<identity>
<dns
value="XuanhunServer1"/>
</identity>
一切配置妥当,启动测试站点却遇到如图11-54所示的错误。
图11-54 “密钥集不存在”错误
出现该错误不是由于提示信息说的密钥问题而是权限问题引起的,只需给Android中的线程
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA这个目录下的MachineKeys文件夹添加Everyone用户并赋予浏览权限即可,如图11-55。
图11-55 设置文件夹权限
解决了权限问题,程序运行成功。这些问题在不了解原理的时候,往往都是经验性的解决,希望读者能多多留意这一类问题。
下面我们来看一下Message安全模式下的消息传输。
图11-56所示为服务端返回的数据。
图11-56 截获的响应数据
从图11-56中的结果来看,服务端对整个消息体进行了加密,内容无从得知,保护了消息的机密性。那s么客户端的请求数据呢?客户端没有对消息体进行加密但是对消息中的关键内容先加密再赋值传输的。代码清单11-109是截取的一段。
代码清单11-109 客户端请求数据
<u:Timestamp
u:Id="uuid-2705e435-cc04-4e1f-9afa-807d73067921-5"><u:Created>2011-06-26T13:18:21.002Z</u:Created><u:Expires>2011-06-26T13:23:21.002Z</u:Expires></
u:Timestamp><o:BinarySecurityToken
u:Id="uuid-33dfb585-d0e8-4167-a5f7-eed40f2d1539-5"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">MIIB+jCCAWegAwIBAgIQZGmT6q0h0ZpAYyS6
XbdjZzAJBgUrDgMCHQUAMBgxFjAUBgNVBAMTDVh1YW5odW5DbGllbnQwHhcNMTEwNjI2MTEyNTAwWhcNMzkxMjMxMjM1OTU5WjAYMRYwFAYDVQQDEw1YdWFuaHVuQ2xp
ZW50MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDElBfTXWrAfHPRjVSLWos4d/Z2Ec9xZ0c8lU4t4Pt/EkwkqFb1gHcfe54eP/CzglT275ftovoYUH0gQGJ0NU89dPEfX1TEyk
YYF5DB0rIxIUZhPBnOrz5BWNYV68bsbARYwxOmj0M2g7nIMWD2vb8gSV6GN2XxG0VoFW1FxOrlRwIDAQABo00wSzBJBgNVHQEEQjBAgBD5HCEdkNXX+nYrhpTvHDwioRowGDE
WMBQGA1UEAxMNWHVhbmh1bkNsaWVudIIQZGmT6q0h0ZpAYyS6XbdjZzAJBgUrDgMCHQUAA4GBAFeHhyrrHKmOrpUsa9uwVdoA6n8cQzizsWlIJh7wZm68v8rNR1WCPZmMmx
KICPA3GNozFr8zp8iuxO1bIfKF9GDhUJRoAe2nopjRp4RHbBkajJpX2DExXNZHNLC1ghULbVdVAqoewDUnsVZZPVzSxjgx38e+jMghtqUoTyfGK7lE</o:BinarySecurityToken>
部分数据客户在请求的时候将数据的二进制数据直接转换成Base64编码,如果我们不知道二进制数据的组织方式仍然没有办法得知传输的内容。
对于安全级别较高的应用场景中,我们还是推荐使用TransportWithMessageCredential安全模式,完全基于Https来确保消息
分享到:
相关推荐
WCF服务演示程序(IIS宿主)
分别用IIS作为宿主和Windows Form作为宿主的WCF例子
WcfServiceLibrary1--- wcf服务:生成dll文件给宿主引用 WinFormsWcfService--- 宿主 WcfClient---调用wcf服务客户端
WCF使用示例代码,包括wcfIIS宿主,进程宿主,wcf调用
一套简单的 WCF 宿主 !一套简单的 WCF 宿主 !一套简单的 WCF 宿主 !一套简单的 WCF 宿主 !一套简单的 WCF 宿主 !一套简单的 WCF 宿主 !
将WCF部署上IIS的步骤与silverlight浏览的安装文件
本个程序,是编写WCF的两种寄宿,第一种是自身寄宿,第二种是IIS寄宿。 在运行 自身寄宿的时候,先运行 Hosting, 在运行 Client。 其二是 IIS寄宿,首先 IISService ,这是一个配置后的,服务,可以吧 IISService...
此程序为以iis为宿主的wcf程序,具体创建过程,请参考我的博客
WCF三层实例及宿主
Wcf 创建及不同宿主方式(自托管,windows服务,IIS)
JS调用WCF服务实例(WCF服务宿主到控制台),解决Js跨域调用问题 源码实例 wcf宿主到控制台上,并内置js调用服务的源码
wcf简单例子 IIS配置:http://www.baidu.com/link?url=WeaZI36XDjBRGSMGQILdL-bV6DGzMXUhVVtRM86oj9iB3gbjZgWaVOBWRjg2z74Iep3b4qzddQlPjNpTCoU7hNroSFyGfUpyE8XDQTe77Ru
wcf宿主到iis时, 如果启用了tcp绑定, 则需要一些额外的配置,详见文档
消息安全模式之UserName客户端身份验证需要服务器需要一个有效的可用于TLS 加密和向客户端验证服务身份的 X.509 证书,并且客户端必须信任此服务器证书。 这里使用http协议。建议安全上下文以后,使用共享安全上下文...
发布WCF服务到IIS,完全配置,不写代码,从头开始,收获会不小哦!
WCF接口Https访问 部署到IIS配置成Https站点 http://www.cnblogs.com/chnking/archive/2008/10/07/1305811.html#_Transport_%E2%80%93_%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%AA%8C%E8%AF%81%EF%BC%9ANone
6,将其部署到IIS上 7,部署之后,你会发现网站上并没有svc文件,所以你不知道该如何访问。 你可以这样访问:右击网站--管理应用程序--浏览 浏览之后并没有看到你想要的效果,此时你只需要在后面加上你在...
WCF鉴权,windows宿主实例。包含用户名验证等等。自创host,service,client。
通常,我们在使用Silverlight的时候,选择数据提供层的一定是WCF。 我们一般发布自己的WCF服务都很自然的打开VS,选择VISUAL C#,找到WCF,选择WCF Service Application一点确定就OK。 但我们知道,WCF可以寄宿在...