WCF NetTcpBinding Transport安全模式(3) ProtectionLevel设置保护级别
WCF NetTcpBinding Transport安全模式(3) ProtectionLevel设置保护级别
书接上文,是哪一项配置使得WCF对传输的消息进行加密操作了呢?继续修改配置文件,客户端配置文件如代码清单11-18所示,服务端配置文件如代码清单11-19所示。
代码清单11-18 修改客户端的protectionLevel
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors >
<endpointBehaviors>
<behavior name="ForListen">
<clientVia viaUri="net.tcp://127.0.0.1:64590/HelloService"/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="tcpWindowsSecurity">
<security mode="Transport" >
<transport protectionLevel="None"></transport>
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint name="helloEndPoint" address="net.tcp://127.0.0.1:64567/HelloService"
binding="netTcpBinding" bindingConfiguration="tcpWindowsSecurity"
contract="WcfSecurityExampleServiceLibrary.IHelloService" behaviorConfiguration="ForListen" />
</client>
</system.serviceModel>
</configuration>
代码清单11-19 修改服务端端的protectionLevel
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="WcfSecurityExampleServiceLibrary.HelloService" behaviorConfiguration="mex">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:64567/"/>
</baseAddresses>
</host>
<endpoint address="net.tcp://127.0.0.1:64567/HelloService" binding="netTcpBinding"
bindingConfiguration="tcpWindowsSecurity" name="helloEndPoint"
contract="WcfSecurityExampleServiceLibrary.IHelloService"/>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="tcpWindowsSecurity">
<security mode="Transport" >
<transport protectionLevel="None"></transport>
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="mex">
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
通过以上两段代码,Transport安全模式下的protectionLevel设置为None。此时运行结果和TcpTrace的结果如图11-8所示。
图11-8 protectionLevel为None时的监听结果
从图11-8的结果看,
protectionLevel为None时WCF不提供对消息的机密性的保证。
说明:protectionLevel为None时,通信的完整性也得不到保证。
将protectionLevel修改为Sign,看运行结果有何不同,如图11-9所示。
图11-9 protectionLevel为Sign运行结果
从图11-9中的结果来看,protectionLevel为Sign时没有对数据进行加密,结果和protectionLevel为None时没有什么差异。事实上,当protectionLevel为Sign时,虽然不对数据做加密处理,但是会对数据的完整性做校验。实现方式是为消息添加一个加密的校验和,当接收到消息后,会对消息重新计算校验和并和客户端附加的校验和进行比较,如果不同请求会被拒绝。
protectionLevel的第三种选项为EncryptAndSign,也是Transport安全模式下的默认安全级别。在此种安全级别下,WCF既提供完整性校验又提供消息加密。
----------------------------注:本文部分内容改编自《.NET 安全揭秘》
作者:玄魂
出处:http://www.cnblogs.com/xuanhun/
原文链接:http://www.cnblogs.com/xuanhun/
更多内容,请访问我的个人站点 对编程,安全感兴趣的,加qq群:hacking-1群:303242737,hacking-2群:147098303,nw.js,electron交流群 313717550。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
关注我: