zoukankan      html  css  js  c++  java
  • 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    protectionLevelNone监听结果

    从图11-8结果看,

    protectionLevel为None时WCF不提供对消息的机密性的保证。

    说明:protectionLevel为None时,通信的完整性也得不到保证。

    protectionLevel修改为Sign,看运行结果有何不同,如图11-9所示。

    图11-9         protectionLevelSign运行结果

    从图11-9结果来看,protectionLevelSign时没有对数据进行加密,结果和protectionLevelNone时没有什么差异。事实上,当protectionLevelSign时,虽然不对数据做加密处理,但是会对数据完整性做校验。实现方式是为消息添加一个加密校验和,当接收到消息后,会对消息重新计算校验和并和客户端附加校验和进行比较,如果不同请求会被拒绝。

    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。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    关注我:关注玄魂的微信公众号

  • 相关阅读:
    URLOS用户福利:申请免费的泛域名(通配符域名)SSL证书
    主机管理面板LuManager以Apache2协议开源发布,可用作商业用途
    微服务设计概览
    使用SpringBoot搭建Web项目
    公共方法整合(四)数组相关
    阿里云短信整合封装类库
    高德地图接口使用整理
    公共方法整合(三)时间相关方法
    PHP 服务端友盟推送
    html 录音并上传
  • 原文地址:https://www.cnblogs.com/xuanhun/p/2560061.html
Copyright © 2011-2022 走看看