继WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发和WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理之后,今天我们继续WSE3.0构建Web服务安全系列文章的第3节:WSE3.0策略配置与实例开发.本节主要讲解如何通过WSE3.0策略配置工具实现Web服务安全,本在全文附带代码讲解。本节结构为1.WSE3.0策略工具介绍2.如何使用WSE3.0策略工具3.代码实现与分析4.总结。最后附上代码供大家下载。
通过上2节的介绍我们知道:WSE 3.0是和Web Service整合在一起。通过对Web Service服务消息模型的扩展实现安全加密机制。 WSE 3.0中,客户端请访问Web服务是通过客户端生成的一个Proxy类来完成。当客户端向服务端发送Web Service调用请求的时候,WSE 3.0扩展框架会对消息进行一些处理,包括过滤、加密、签名等。而服务器端Web Service在收到客户端的调用请求后,WSE 3.0扩展框架同样会先对SOAP消息进行解密、签名的验证等操作。如果合法则相应用户请求,否则就抛出服务不可用异常给客户端。这些工作都是由WSE 3.0扩展框架自动完成解密、签名的验证等操。
WSE 3.0提供的安全机制保证了Web Service的安全。同时实现安全的方式也有两种,一种就是通过的WSE3.0策略工具根据应用系统的安全规格给服务端和客户端设置相应的安全策略。其次就是用代码实现具体的安全策略相同的功能。第一种方式方便快捷,通过简单的设置即可完成Web服务的安全。后者用户可以定义更具体的代码来扩展自己的安全策略,相对来说需要自己写策略代码。不论采用那种方式,我们都可以利用WSE 3.0提供的安全机制守卫我们的Web服务。
      另外WSE 3.0也提供了其他的一些特性,例如多宿主托管Web服务、用户自定义的安全断言、对消息传输优化机制MTOM的支持、使用TCP传输控制协议传递SOAP消息等。我们也可以根据实际的系统需求来利用WSE 3.0提供的新特性,优化我们的系统。第一节中我们也提到在 Web Serivice项目中启用 WSE 3.0 的一个重要原因,就是要利用它的策略管道扩展性模型。因为WSEWSE 3.0 使您能够插入对进入和离开终结点的 SOAP 消息执行预处理和后续处理的筛选器,它提供的功能可以创建能够与WSEWSE 3.0 提供的现有声明性安全策略相结合的自定义声明性策略。下面我们来介绍一下WSE3.0配置工具,以及如何配置安全策略。
【1】WSE3.0策略工具介绍
首先我们来介绍一下这个工具。WSE3.0具体的安装细节已经在第一节WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发中做了介绍。当我们安装完毕会在新建的Web Service Vsual Studio 2005 项目右键菜单看到WSE 3.0设置。打开以后会出现配置工具的具体界面。如图:
它包括的通用、安全、路由、策略、令牌问题、调试、消息7个选项卡。
1)通用选显卡包括是否在项目里支持WSE3.0和WSE3.0 SOAP消息工厂。
2)安全选显卡可以设置用户令牌管理类库,以及证书和消息的有效时间。
3)路由选项卡可以设置消息中介者SoapHttpRouter对进入和传出的消息加密。
4)策略选项卡可以更具安全需求对服务端和客户端设置特定的安全策略,策略会存储在相应的安全策略文件里。
5)令牌问题选项卡可以设置令牌的TTL有效存活时间。以及是否使用安全上下文令牌。
6)调试选项卡可以设置项目的具体调试的细节。消息输入和输出的的文件以及是否舒服错误信息等。
7)消息选项卡主要是对消息优化传输机制MTOM的一些设置。
【2】如何使用WSE3.0策略配置工具
以上简单介绍了WSE3.0策略配置工具,下面我们来具体介绍主要选项的具体使用过程。
1)如果用户选择了项目里支持WSE3.0和WSE3.0 SOAP消息工厂。
会在相应的配置WebConfig文件里自动添加一下信息。
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
   <webServices>
   <soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </webServices>
 </system.web>
配置文件更新完毕代表刚才的设置成功。
2)用户可以在这里设置安全选显卡可以设置用户令牌管理类库,以及证书和消息的有效时间。如图
这里设置的UsernameTokenManager类库为我们自己定义的类库,设置时要正确填写DLL的名称、命名空间、类的信息。完成以后会在配置文件里生成代码。
    <security>
      <securityTokenManager>
        <add type="MyUsernameTokenManager.MyUsernameTokenManager, UsernameTokenManagerClassLib" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken" />
      </securityTokenManager>
    </security>
3)路由选项卡可以设置消息中介者SoapHttpRouter对进入和传出的消息加密,这里就不做详细的介绍,具体大家可以参考MSDN。
4)策略选项卡可以更具安全需求对服务端和客户端设置特定的安全策略。用户可以决定是否使用策略和策略的管理。
服务端和客户端添加策略的文件类似,当用户选择添加策略文件的时候,会启动一个策略配置向导,你输入策略名称后,就可以继续下一步。如图
用户可以选择可以给客户端还是服务端进行策略设置,客户端认证方法包括4种。
A.Anonymous 匿名访问,不需要提供用户名和密码。服务器默认客户端请求已经进行加密。
B.Username 需要包含用户名和密码的Usernametoken的安全令牌。
C.Certificate 需要提供服务端认证的X.509证书。
D.Windows 需要提供服务端认证的KerberosT令牌,此方式不属于WS-*安全协议的范畴,使用Windows Kerberos 认证机制。
如果在向导中选择消息传输保护,还需要设置安全需求比如是否支持WS-*安全协议1.1扩展、签名、加密等策略,如图:
A.None :SOAP消息应当在传输层依赖安全套接层协议(SSL,Security Socket Layer)提供保护,WSE在传输层不提供保护。
B.Sign-Only :客户端需要对SOAP消息签名。保证消息的唯一性。
C.Sign and Encrypt:WSE对SOAP消息签名,且对SOAP消息体加密,来保证消息安全。
D.Sign, Encrypt, Encrypt Signature:WSE对 SOAP消息必须签名、消息体签名加密 、对签名进行加密。
使用匿名方式生成的策略是
  <policy name="ServerPolicy">
    <usernameOverTransportSecurity />
    <requireActionHeader />
  </policy>
表示只依赖于传输层安全机制,但是这个安全级别比较低。消息容易被截获和破译。
5)令牌问题选项卡可以设置令牌的TTL有效存活时间。以及是否使用安全上下文令牌。
令牌生存期为30秒,设置后对应的配置文件节点为
    <tokenIssuer>
      <ttlInSeconds value="30" />
    </tokenIssuer>
6)调试选项卡可以设置项目的具体调试的细节。消息输入和输出的的文件以及是否舒服错误信息等。
具体的设置后生成的配置节点如下:
    <diagnostics>
      <trace enabled="true" input="InputTrace.webinfo" output="OutputTrace.webinfo" />
      <detailedErrors enabled="true" />
    </diagnostics>
这样可以输入错误消息,便于调试。
7)消息选项卡主要是对消息优化传输机制MTOM的一些设置。
如果使用消息优化机制,可以设置相应的选项,
    <messaging>
      <mtom clientMode="On" serverMode="always" />
    </messaging>
这样表示一直使用消息优化传输机制。
【3】代码实现与分析
通过上面对WSE3.0配置工具的消息介绍,现在我们来使用WSE3.0配置工具来进行简单的项目配置。
在介绍代码实现以前,先要强调一点,WSE3.0安全机制的工作原理,比如签名。我们在使用策略工具进行设置,对消息消息签名,会要求你提供一个X509证书,也就是服务端认证的公钥。来对消息加密。服务端配置的策略的同时会在服务端提供对应的私钥进行解密,我们要做的就是提供认证的证书和设置安全策略文件。加密和解密验证的过程由WSE3.0来为我们完成。下面我们还是以上次的代码的基础上,来演示我们的具体WSE3.0策略工具的配置过程。使用证书的加密和解密的代码我会给出讲解,但是就不会给具体的实现了。(XP无法安装证书服务机构,自己制作的证书需要认证通过后,才能使用)几种方式的配置有类似之处,大家有兴趣可以查阅MSDN的资料。或者留言交流。
1)服务端:服务器端策略配置使用Username 方式,需要客户端提供用户名和密码的Usernametoken的安全令牌。具体策略文件对应节点如下:
  <policy name="ServerPolicy">
    <usernameOverTransportSecurity />
    <requireActionHeader />
  </policy>
服务端代码需要做相应的更改,添加使用策略的属性标识Microsoft.Web.Services3.Policy("ServerPolicy")]。具体代码如下:
Code
[Microsoft.Web.Services3.Policy("ServerPolicy")]
public class Service : System.Web.Services.WebService
{
    public Service () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello Guys, Frank Xu Lei.is testing WSE3.0 Setting Policy";
    }
    
}

2)客户端:
客户端与服务端配置相对应的安全策略。即提供用户名和密码的Usernametoken的安全令牌。策略相同:
  <policy name="ClientPolicy">
    <usernameOverTransportSecurity />
    <requireActionHeader />
  </policy>
客户端的测试代码做做了相应更新。 需要设置代理策略,语句是serviceProxy.SetPolicy("ClientPolicy");具体代码如下
Code
 // 创建Web service proxy的实例 
            ServiceWse serviceProxy = new ServiceWse();
            //通过UsernameToken类的实例添加用户名与口令。
            UsernameToken token = new UsernameToken("FrankXu", "123456789", PasswordOption.SendPlainText);
            //MessageSignature _messageSignature = new MessageSignature(token);
            //_messageSignature.SigningKey
            // 设置用户令牌到服务代理
            serviceProxy.SetClientCredential(token);

            // 代理设置策略
            serviceProxy.SetPolicy("ClientPolicy");

            //调用服务方法
            string result = serviceProxy.HelloWorld();
            try
            {
                Console.WriteLine(result);//打印结果
                Console.WriteLine("Calling {0}", result);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            //释放对象资源
            if(serviceProxy != null)
            serviceProxy.Dispose();
            
            // Success!
            Console.WriteLine("Web Service called successfully");
            //For debug
            Console.WriteLine("Press any key to continue");
            Console.ReadLine();

这个表示服务端和客户端使用了相同的安全策略。客户端按照策略把用户名和密码封装到UsernameToken里,添加到Soap消息里,发送给服务端。服务端根据策略解析Soap消。反序列化UsernameToken。然后进行用户名和密码的安全验证。
3)运行演示:
【4】总结
另外如果用户服务安全使用签名,加密,加密使用到证书等安全策略,可以使用WSE3.0配置工具设置具体策略到wse3policyCache.config文件中,来实现系统的安全。此外也可以使用WSE3.0提供的类库来利用代码实现。代码如下:
            //如下代码实现了和 wse3policycache.config一样的策略功能
            UsernameForCertificateAssertion assertion = new UsernameForCertificateAssertion();
            //设置 X509证书到安全断言.
            assertion.X509TokenProvider = new X509TokenProvider(StoreLocation.CurrentUser,
                                                                StoreName.AddressBook,
                                                                "CN=WSE2QuickStartServer",//证书
                                                                X509FindType.FindBySubjectDistinguishedName);
            //设置签名选项。
            assertion.Protection.Request.SignatureOptions = SignatureOptions.IncludeAddressing |
                                                 SignatureOptions.IncludeTimestamp |
                                                 SignatureOptions.IncludeSoapBody;
            //加密消息主体
            assertion.Protection.Request.EncryptBody = true;
以上就是对WSE3.0配置工具的使用过程的详细介绍。我们了解了整合WSE3.0配置工具相关的概念和使用方法,以及使用WSE3.0配置工具对具体的项目进行安全设置的实现过程。希望通过本文的介绍,大家能对WSE3.0实现Web服务的安全有个新的了解。基础知识和概念请参考本系列的前两节。在调试WSE3.0安全项目的时候遇到的错误以及解决办法我也放到博客的开发常见错误解决系列文章里。最后放上本文的实现代码/Files/frank_xl/WSE3UserNameTokenWithPolicyCodedByFrankXuLei.rar,供大家参考。因为最近比较忙,所以本节文章准备时间花费了一周,希望能对大家的学习有点帮助,也欢迎留言交流。谢谢~~

转载于:https://blog.51cto.com/frankxulei/320501

WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发相关推荐

  1. WSE3.0构建Web服务安全(4):MTOM消息传输优化和文件上传、下载

    MTOM消息优化传输机制主要应用于大量数据的传输,很多文章中也直接得出结论:使用MTOM文件传输效率高.为什么MTOM的数据传输效率会比别的方式要高?MTOM真的如此完美吗,它有什么不足?什么情况下使 ...

  2. php构建soap_使用PHP构建Web服务

    php构建soap 在你开始前 关于本教程 本教程适用于希望通过在PHP中创建Web服务来跳入Web服务潮流PHP程序员. 您将通过使用PHP构建SOAP服务器来构建Web服务. 您将创建的Web服务 ...

  3. 利用 Celery 构建 Web 服务的后台任务调度模块

    来源:http://www.tuicool.com/articles/Enaeymm 任务队列在 Web 服务里的应用 在 Web2.0 后的时代,社交网站.搜索引擎的的迅猛发展对 Web 服务的后台 ...

  4. 使用 Ajax 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机

    James Snell (jasnell@us.ibm.com), 软件工程师,新兴技术, IBM James Snell 是 IBM 的 software group 中的 emerging Int ...

  5. Spring Cloud构建微服务架构(四)分布式配置中心

    Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...

  6. android 8.0手机开服务端,Android 8.0 + Service开启方式兼容处理

    Android 8.0 + ,对后台服务进行了限制了.如果依然采用之前startService()方式. 会导致问题. 前后台服务的一些区别: 有人可能会问,后台服务我们可以自己创建 ONGOING ...

  7. iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000)

    iis7.0官方安装包下载 iis7时微软为新一代web服务器开发的服务器软件,安全性较iis5\iis6都有所提高,现在很多网友在找iis7完整安装包下载地址,其实 只要你安装的是win7或者vis ...

  8. GoLang—使用net/http构建Web服务(文件数据存储)(上)

    数据存储可以分为三大类:文件存储.关系型的数据库(SQL)和非关系型的数据库(NoSQL).本文主要讲述文件存储的实现方式. 文件存储根据不同的文件实现不同的存储方式:普通文件(如txt读写).CSV ...

  9. freebsd 手工安装zabbix2.0 php,zabbix 服务端,子客户端安装配置日志

    针对已经有mysql nginx php 的linux环境 ,zabbix2.4.8对不同版本的mysql会报不同的错,php也一样. 这只是针对本人的环境下的安装部署,mysql是5.6.4rmp安 ...

最新文章

  1. LeetCode Longest Absolute File Path(栈和前缀和解法)
  2. PCL点云曲面重采样三种方法:上采样,下采样,均匀采样
  3. messenger android 4.,AndroidIPC机制(4)-Messenger
  4. openstack添加热添加硬盘并识别
  5. 即将发版!Apache Flink 1.9 版本有哪些新特性?
  6. 学术 | 不爱科研,只为当大学老师而读博,这种做法对吗?
  7. Atitit 提升团队开发效率项目进度的一些大的流程方向attilax总结
  8. Atitit  数据库的事件机制--触发器与定时任务attilax总结
  9. mysql 2008 教程_sql 2008 视频教程数据库从入门到精通自学视频教程_IT教程网
  10. amesim子模型_为什么amesim模型建立后有的元件没有可用的子模型
  11. [虾神GIS制图课堂]四色地图配色法
  12. 基于Flask的视频网站设计与实现(Python电影视频推荐系统)
  13. Label的常用属性设置和使用
  14. python用matplotlib作图时,x轴为时间轴,如何让x轴每隔几个点显示一次?
  15. 超直线能否用于真实物理空间?
  16. 01、功率放大器设计——MRF8P9040N
  17. React 下一代数据流 hox vs Recoil 使用对比分析
  18. 使用OmicShare Tools做权重网络图
  19. html图片自动适应窗口大小,使用CSS自动调整浏览器大小的图片大小
  20. CAN总线之通俗易懂----工业连接器

热门文章

  1. Kafka项目实战-用户日志上报实时统计之编码实践
  2. Canvas、Paint、Path
  3. 安装好android的adt以后重启eclipse,但是没有创建AVD的图标
  4. MVC中HtmlHelper用法大全
  5. Oracle数据库常用的脚本命令(一)
  6. UWP 查找模板中的控件
  7. ubuntu16.04装机:网易云+搜狗拼音+chrome+uGet+caffe(openCV3.1+CUDA+cuDNN+python)
  8. 阿里云OSS存储开发
  9. 【计算机视觉】森林火灾检测-1
  10. SharePoint 2010开发实例精选——“每日一句”WebPart