开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看
   继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")]。具体代码如下:
ExpandedBlockStart.gif
[Microsoft.Web.Services3.Policy("ServerPolicy")]
public class Service : System.Web.Services.WebService
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif    
public Service () {

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


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

    
}


 
2)客户端:
客户端与服务端配置相对应的安全策略。即提供用户名和密码的Usernametoken的安全令牌。策略相同:
  <policy name="ClientPolicy">
    <usernameOverTransportSecurity />
    <requireActionHeader />
  </policy>
 客户端的测试代码做做了相应更新。 需要设置代理策略,语句是serviceProxy.SetPolicy("ClientPolicy");具体代码如下
ExpandedBlockStart.gif
 // 创建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
ExpandedBlockStart.gif            
{
                Console.WriteLine(result);
//打印结果
                Console.WriteLine("Calling {0}", result);
            }

            
catch (Exception ex)
ExpandedBlockStart.gif            
{
                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,供大家参考。因为最近比较忙,所以本节文章准备时间花费了一周,希望能对大家的学习有点帮助,也欢迎留言交流。谢谢~~



 本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/320501,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Web 开发的演变:转向 Web.Next
CERN 的 Tim Berners-Lee 发明现代 Web 时的初衷是将其作为允许在基于网络的系统上存储和链接静态文档的系统。之后的数年间,随着创新的发展和成熟,"活动"文档自然而然地成为了现代 Web 发展的新阶段,这些文档在收到访问请求时即会生成,文档中包含特定于时间或用户的信息。
620 0
【今日推荐】移动 Web 开发的10个最佳 JavaScript 框架
  选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务。开发人员可以使用框架实现的功能高效地达到他们的开发目标。这些预实现的组件采用优秀的设计模式和最佳实践,促进应用程序以标准化的方式开发。
1702 0
移动 Web 开发的10个优秀 JavaScript 框架
选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务。开发人员可以使用框架实现的功能高效地达到他们的开发目标。这些预实现的组件采用优秀的设计模式和最佳实践,促进应用程序以标准化的方式开发。最重要的是,它让开人员在开发过程中得心应手。
0 0
Python Web开发(十一):ORM 对关联表的操作
Python Web开发(十一):ORM 对关联表的操作
0 0
Python开发自定义Web框架
接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。
0 0
使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率
程序员区别于其他岗位的一个优势是,我们可以充分利用自己掌握的编程语言,将平日一些琐碎的,重复的日常工作,通过代码来实现自动化,从而省下更多的时间来投入到技术含量更高的工作中,提高工作效率。
0 0
SpringBoot学习笔记-4:第四章 Spring Boot Web 开发(1)
SpringBoot学习笔记-4:第四章 Spring Boot Web 开发
0 0
SpringBoot学习笔记-4:第四章 Spring Boot Web 开发(2)
SpringBoot学习笔记-4:第四章 Spring Boot Web 开发
0 0
SpringBoot学习笔记-4:第四章 Spring Boot Web 开发(3)
SpringBoot学习笔记-4:第四章 Spring Boot Web 开发
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Web应用系统性能优化
立即下载
使用CNFS搭建弹性Web服务
立即下载
WEB浏览器中即将发生的安全变化
立即下载