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,如需转载请自行联系原作者


相关文章
|
20天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
30天前
|
网络协议 Java Nacos
nacos常见问题之在web界面 上下线服务时报错 400如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
29 0
|
30天前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
404 3
|
30天前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
29 7
|
30天前
|
安全
网易web安全工程师进阶版课程
《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心知识,成为安全领域高精尖人才。 ## 学习地址
23 6
网易web安全工程师进阶版课程
|
5天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
15 0
|
5天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
9天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
9天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
13天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介