用Visual Studio2010实现wcf服务的保护


虽然客户/服务间的通信已经能够正常工作,而且服务返回的结果也和我们想象的一样,但服务是不安全的。在布署服务时,安全性是一个主要的考虑因素,而WCF使得对服务进行保护变得非常容易。

  在这个练习中,我们先要证明与Derivatives Calculator服务之间的通信没有经过加密。我们然后会对服务使用的绑定进行修改,从而让我们与服务之间的通信是保密的。

  1.查看未经保护的服务消息

  (1)打开一个命令行窗口。

  具体步骤:选择Start | Run菜单项,然后输入CMD并按Enter键。

  (2)在命令行窗口中,输入“md c:\logs”并按Enter键。

  这会在C:盘中创建一个名为logs的目录。

  (3)输入Exit并按Enter键来关闭命令行窗口。

  (4)回到Visual Studio,在Solution Explorer的DerivativesCalculatorService项目中,右键单击Web.config文件并选择Open菜单项。

  (5)用下面的XML代码替换web.config文件中的内容。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
        <listeners>
          <add name="xml”                        
            type="System.Diagnostics.XmlWriterTraceListener"
            initializeData="C:\logs\message.log" />
        </listeners>
      </source>
    </sources>
    <trace autoflush="true" />
  </system.diagnostics>

  <system.serviceModel>

    <diagnostics>
      <messageLogging logEntireMessage="true"
                        maxMessagesToLog="300"
                        logMessagesAtServiceLevel="false"
                        logMalformedMessages="true"
                        logMessagesAtTransportLevel="true" />
    </diagnostics>

    <services>
      <service name="DerivativesCalculatorService.Calculator">
        <endpoint address=""
            binding="basicHttpBinding"
            contract="DerivativesCalculatorService.IDerivativesCalculator"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

  上面的配置告诉WCF把服务的通信以XML格式保存在c:\logs\message.log文件中。

  产生日志文件

  (6)选择Build | Build Solution菜单项。

  (7)在Solution Explorer中右键单击Client项目并选择Debug | Start new instance菜单项。

  (8)在刚打开的Client.EXE命令行窗口中按Enter键。我们会看到客户程序从运行在IIS中的Derivatives Calculator服务获得了一个衍生产品的估计价格。

  (9)在Client.EXE命令行窗口中按Enter键来关闭客户程序

  (10)选择Start | Run菜单项,输入Notepad并按Enter键。

  (11)在Notepad中选择File | Open菜单项。

  (12)找到C:\Logs\message.log并单击Open按钮。

  (13)选择Edit | Find菜单项,在Find what文本框中输入“MSFT”并单击Find Next按钮。

  我们能够找到这个字符串,因为这是客户程序发给服务的消息中用到的股票代号。这证明了与客户程序与服务间的通信是未经加密的。

  (14)单击Cancel按钮来关闭Find对话框。

  (15)选择File | Exit菜单项来关闭Notepad。

  2.对服务进行保护

  只要简单地配置一下服务的绑定,就可以对服务进行保护。

  wsHttpBinding

  WSHttpBinding与BasicHttpBinding相似,但它提供了更多与Web服务有关的特性。它使用HTTP传输协议,并提供了消息层级的加密,这些和BasicHttpBinding一样。但它还支持事务处理、可靠消息、WS-Addressing等特性,这些特性要么默认情况下就已经启用,要么通过一个设定就可以启用。

  配置服务

  (1)回到Visual Studio,打开Web.config,准备编辑。

  (2)将终结点的绑定属性从basicHttpBinding改为wsHttpBinding,如下面加亮的代码所示。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  . . .
  <system.serviceModel>

    . . .

    <services>
      <service name="DerivativesCalculatorService.Calculator">
        <endpoint address=""
            binding="wsHttpBinding"
            contract="DerivativesCalculatorService.IDerivativesCalculator"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

  配置客户程序

  (3)在Client项目中打开app.config文件,准备编辑。

  (4)删除endpoint的bindingConfiguration attribute。

  (5)将终结点的绑定从basicHttpBinding改为wsHttpBinding。

  (6)需要改动的地方如下面加亮的代码所示:


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
     . . .
    </bindings>
    <client>
      <!-- remove bindingConfiguration attribute -->
      <endpoint
        address="http://localhost/DerivativesCalculatorService/Service.svc"
            binding="wsHttpBinding"
            contract="IDerivativesCalculator"
            name="DerivativesCalculatorConfiguration" />
    </client>
  </system.serviceModel>
</configuration>

  运行使用了安全绑定的服务和客户程序

  (7)选择Build | Build Solution菜单项。

  (8)在Solution Explorer中右键单击Client项目并选择Debug | Start new instance菜单项。

  (9)在刚打开的Client.EXE命令行窗口中按Enter键。

  (10)客户程序从运行在IIS中的Derivatives Calculator服务获得了一个衍生产品的估计价格。

  (11)在Client.EXE命令行窗口中按Enter键来关闭客户程序。

  检查日志文件

  除了用notepad来查看message.log文件,我们还可以使用Microsoft Service Trace Viewer,它是专门设计用来查看、检索、过滤和分析WCF跟踪文件的。

  (12)选择Start | All Programs | Microsoft Windows SDK v6.0A | Tools | Svc Trace Viewer菜单项。

  (13)选择File | Open菜单项并将当前目录切换到C:\logs文件夹。

  (14)在File name文本框中输入message.log并单击Open按钮。

  (15)选择Message选项卡。

  (16)在Message选项卡中的消息列表中,选择倒数第二条消息(如图所示)。


在Service Trace Viewer中选择倒数第二条消息

  (17)在右下方切换到Message视图。

  (18)查找字符串MSFT。

  这一次我们无法找到该字符串。

  服务现在已经经过配置,它会对接收和发送的消息进行加密,从而保证消息的内容是保密的

虽然客户/服务间的通信已经能够正常工作,而且服务返回的结果也和我们想象的一样,但服务是不安全的。在布署服务时,安全性是一个主要的考虑因素,而WCF使得对服务进行保护变得非常容易。

  在这个练习中,我们先要证明与Derivatives Calculator服务之间的通信没有经过加密。我们然后会对服务使用的绑定进行修改,从而让我们与服务之间的通信是保密的。

  1.查看未经保护的服务消息

  (1)打开一个命令行窗口。

  具体步骤:选择Start | Run菜单项,然后输入CMD并按Enter键。

  (2)在命令行窗口中,输入“md c:\logs”并按Enter键。

  这会在C:盘中创建一个名为logs的目录。

  (3)输入Exit并按Enter键来关闭命令行窗口。

  (4)回到Visual Studio,在Solution Explorer的DerivativesCalculatorService项目中,右键单击Web.config文件并选择Open菜单项。

  (5)用下面的XML代码替换web.config文件中的内容。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
        <listeners>
          <add name="xml”                        
            type="System.Diagnostics.XmlWriterTraceListener"
            initializeData="C:\logs\message.log" />
        </listeners>
      </source>
    </sources>
    <trace autoflush="true" />
  </system.diagnostics>

  <system.serviceModel>

    <diagnostics>
      <messageLogging logEntireMessage="true"
                        maxMessagesToLog="300"
                        logMessagesAtServiceLevel="false"
                        logMalformedMessages="true"
                        logMessagesAtTransportLevel="true" />
    </diagnostics>

    <services>
      <service name="DerivativesCalculatorService.Calculator">
        <endpoint address=""
            binding="basicHttpBinding"
            contract="DerivativesCalculatorService.IDerivativesCalculator"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

  上面的配置告诉WCF把服务的通信以XML格式保存在c:\logs\message.log文件中。

  产生日志文件

  (6)选择Build | Build Solution菜单项。

  (7)在Solution Explorer中右键单击Client项目并选择Debug | Start new instance菜单项。

  (8)在刚打开的Client.EXE命令行窗口中按Enter键。我们会看到客户程序从运行在IIS中的Derivatives Calculator服务获得了一个衍生产品的估计价格。

  (9)在Client.EXE命令行窗口中按Enter键来关闭客户程序

  (10)选择Start | Run菜单项,输入Notepad并按Enter键。

  (11)在Notepad中选择File | Open菜单项。

  (12)找到C:\Logs\message.log并单击Open按钮。

  (13)选择Edit | Find菜单项,在Find what文本框中输入“MSFT”并单击Find Next按钮。

  我们能够找到这个字符串,因为这是客户程序发给服务的消息中用到的股票代号。这证明了与客户程序与服务间的通信是未经加密的。

  (14)单击Cancel按钮来关闭Find对话框。

  (15)选择File | Exit菜单项来关闭Notepad。

  2.对服务进行保护

  只要简单地配置一下服务的绑定,就可以对服务进行保护。

  wsHttpBinding

  WSHttpBinding与BasicHttpBinding相似,但它提供了更多与Web服务有关的特性。它使用HTTP传输协议,并提供了消息层级的加密,这些和BasicHttpBinding一样。但它还支持事务处理、可靠消息、WS-Addressing等特性,这些特性要么默认情况下就已经启用,要么通过一个设定就可以启用。

  配置服务

  (1)回到Visual Studio,打开Web.config,准备编辑。

  (2)将终结点的绑定属性从basicHttpBinding改为wsHttpBinding,如下面加亮的代码所示。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  . . .
  <system.serviceModel>

    . . .

    <services>
      <service name="DerivativesCalculatorService.Calculator">
        <endpoint address=""
            binding="wsHttpBinding"
            contract="DerivativesCalculatorService.IDerivativesCalculator"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

  配置客户程序

  (3)在Client项目中打开app.config文件,准备编辑。

  (4)删除endpoint的bindingConfiguration attribute。

  (5)将终结点的绑定从basicHttpBinding改为wsHttpBinding。

  (6)需要改动的地方如下面加亮的代码所示:


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
     . . .
    </bindings>
    <client>
      <!-- remove bindingConfiguration attribute -->
      <endpoint
        address="http://localhost/DerivativesCalculatorService/Service.svc"
            binding="wsHttpBinding"
            contract="IDerivativesCalculator"
            name="DerivativesCalculatorConfiguration" />
    </client>
  </system.serviceModel>
</configuration>

  运行使用了安全绑定的服务和客户程序

  (7)选择Build | Build Solution菜单项。

  (8)在Solution Explorer中右键单击Client项目并选择Debug | Start new instance菜单项。

  (9)在刚打开的Client.EXE命令行窗口中按Enter键。

  (10)客户程序从运行在IIS中的Derivatives Calculator服务获得了一个衍生产品的估计价格。

  (11)在Client.EXE命令行窗口中按Enter键来关闭客户程序。

  检查日志文件

  除了用notepad来查看message.log文件,我们还可以使用Microsoft Service Trace Viewer,它是专门设计用来查看、检索、过滤和分析WCF跟踪文件的。

  (12)选择Start | All Programs | Microsoft Windows SDK v6.0A | Tools | Svc Trace Viewer菜单项。

  (13)选择File | Open菜单项并将当前目录切换到C:\logs文件夹。

  (14)在File name文本框中输入message.log并单击Open按钮。

  (15)选择Message选项卡。

  (16)在Message选项卡中的消息列表中,选择倒数第二条消息(如图所示)。


在Service Trace Viewer中选择倒数第二条消息

  (17)在右下方切换到Message视图。

  (18)查找字符串MSFT。

  这一次我们无法找到该字符串。

  服务现在已经经过配置,它会对接收和发送的消息进行加密,从而保证消息的内容是保密的


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3