基于WSE的Web服务身份验证研究与实现
2011-10-19郑州铁路职业技术学院
郑州铁路职业技术学院 李 咚
基于WSE的Web服务身份验证研究与实现
郑州铁路职业技术学院 李 咚
Web服务(Web Services)作为分布式计算模型,以其良好的扩展性、松耦合性等特点在电子商务、政务等方面都得到了广泛应用。由于Web服务面临着信息丢失、被窃听、被篡改等安全性风险,如何在Web服务中实现身份验证、授权、机密性、完整性以及不可抵赖性等安全措施,是系统应用的重要保证。其中,身份验证是Web服务安全控制的基础,同时也决定了后续操作的安全性。Web服务的身份验证已经成为网络安全研究中的一个重要领域。
Web服务构建在一组以XML为基础的标准协议之上,是一种自包含、自描述、组件化的应用程序。Web服务作为一种崭新的分布式计算模型,是Web上数据和应用集成的有效机制,也是网格和云计算等新兴计算技术的首选实现方式。Web服务具有平台无关性、动态性、开放性和松散耦合的特征,这给企业应用集成带来极大的便利,同时也使其自身面临许多独特的安全问题。Web服务的安全性对其应用前景产生至关重要的影响,也是目前Web服务并未进入大规模应用阶段的主要原因之一。
一、Web服务及身份验证
1.Web服务简介。Web服务是一种通过网络进行发布、发现和调用的服务器端软件组件。Web服务的实现依赖于一系列的标准协议或规范,其上层核心标准基于XML,借助WSDL和UDDI进行描述、发布与发现,使用SOAP进行访问,并通过HTTP等进行传输,具有优异的松耦合性、跨平台性等特征,为其在异构平台上进行系统的集成与交互提供了充分的保证。
2.Web服务的安全机制。Web服务的安全机制目前主要通过传输层安全和消息层安全加以解决。基于传输层的安全机制通过安全传输协议(SSL)、防火墙以及限制IP地址等实现点到点的安全性保障,但是无法提供应用层中间节点参与Web服务时的数据安全保障。基于消息层的安全机制通过对SOAP消息头的扩展添加安全元素,整合已成熟的安全技术对SOAP消息进行签名和加密,在应用层上实现Web服务的细粒度保护和端到端的安全传输需求。
3.Web服务的身份验证。Web服务的身份验证是消息发送方将身份凭证传递给接收者来证明自己身份的过程。常用的身份验证方式有以下几种。
(1)基本身份验证。客户端使用明文(Base64编码)直接传送用户名和密码在服务端进行验证。基本身份验证与SSL结合可以实现在传输层的安全传输。
(2)摘要身份验证。在基本身份验证的基础上将验证信息散列后传输。攻击者无法根据散列值破解原始用户名和密码。
(3)集成Windows身份验证。主要用于Intranet方案,使用NTLM或Kerberos。客户端属于服务器所在的域或托管域,如果凭据能与有效账户匹配,客户端获得Web服务授权。
(4)客户证书。要求在服务器和客户端上有从受信任的第三方获取的相应证书,客户端必须凭有效的证书才能进行Web服务,具有较高的安全保障。
(5)自定义验证。采用自定义的接口验证用户身份。这种验证方式灵活,服务器可以定义各种验证所需要的接口和算法,如基于SOAP header的验证方式。
二、WS-Security规范与WSE
1.WS-Security规范。WS-Security规范是IBM、Microsoft等公司联合开发的Web服务安全规范。WS-Security规范并未提出新的加密算法或安全模型,只是对SOAP协议的扩展,在消息报头中定义了安全元素<security>及其子元素来提供身份验证、消息完整性、机密性的安全保护,使应用程序达到构建安全的SOAP消息交换的目标。
2.WSE架构及安全断言。WSE(Web Services Enhancements)是微软发布的在.NET框架下用来实现符合WS-Security规范的开发工具包,其体系架构基于策略(Policy)和安全管道。管道用策略来创建,策略由有序的断言组成。每个断言定义一个对Web服务的要求,由断言生成的输入、输出筛选器对进出结点的SOAP消息进行截获和处理,执行对Web服务的安全要求。目前的WSE3.0版本提供了6种安全断言,用户可以根据以下3种不同的场景选择适合的身份验证方式。
(1)用户名/密码场景。Username over Transport Assertion提供客户端简单的用户名和密码验证,需要依赖安全传输层来保障消息的安全。
Username for Certificate Assertion要求服务器配置自己的X.509证书,客户端配置用户名/密码凭据和服务器的X.509证书(仅公钥),可以保证端到端的安全身份验证。
(2)X.509证书场景。Anonymous for Certificate Assertion要求服务器配置自己的X.509证书,客户端配置服务器的X.509证书(仅公钥),客户端在使用证书验证时允许保持匿名。
Mutual Certificate 10 Assertion和 Mutual Certificate 11 Assertion要求客户端和服务器均使用自己的X.509证书执行相互验证,而后者使用WS-Security1.1规范确保更好的安全性能。
(3)Kerberos身份验证场景。Kerberos Assertion提供客户端和服务器位于同一个信任域中时的Kerberos身份验证。由于不需要将证书分发给所有参与者,需要的部署工作没有其他身份验证断言多。
三、Web服务身份验证的设计与实现
1.身份验证的设计。Web服务的整体解决方案采用Visual Studio 2005开发。身份验证在设计时根据不同的安全需求和用户规模采用不同的安全策略。对于一般用户群,采用Username for Certificate Assertion进行简单的身份验证,客户端使用用户名和口令,服务器用X.509证书验证身份。对于重要用户,采用Mutual Certificate 11 Assertion,客户端和服务器都用X.509证书实现更为安全的验证。
2.Web服务身份验证的实现。WSE3.0已经集成到Microsoft Visual Studio 2005 IDE开发环境中,下面基于C#语言以Username for Certificate Assertion断言为例,说明如何实现Web服务的安全身份验证。
(1)开发环境构建。使用Username for Certificate Assertion时,服务器需要配置自己的X.509证书,客户端需要配置用户名/密码令牌和服务器的X.509证书(仅公钥)。利用windows 2003Server证书服务构建CA服务器申请服务器证书,并将其安装到本地计算机的个人存储区。客户端下载服务器证书,并使用MMC将其导入到当前用户的其他存储区。
在开发环境中要确保已经安装WSE3.0框架并可以运行WSE部件。在代码中加入Microsoft.Web.Services3.dll引用和Microsoft.Web.Service3命名空间。
(2)Web服务器端开发创建自定义身份验证。WSE默认进行基于Windows身份验证,因此用户需要自定义身份验证。首先创建由 Username Token Manager类派生的自定义类Custom Token Manager,重载AuthenticateToken方法来处理身份验证。该方法根据令牌中的用户名访问数据库获得用户密码信息提供给WSE验证,若通过验证,则允许调用Web服务。主要代码如下:
服务器端WSE的配置。使用设置管理器向导进行服务器WSE的配置,鼠标右击项目,选择进入WSE Settings配置界面,在 General页选中“Enable this project for Web Services Enhancements”和“Enable Microsoft Web Services Enhancement SOAP Protocol Factory”复选框,启用WSE保护。在Policy页新建名为“ServersPolicy”的安全策略并设置:应用类型选择“secure a service application”表示是服务器端。验证方式选择“username”,采用Username over Certificate Security安全断言。启用WS-Security 1.1扩展,选择“Sign and Encrypt”,表示SOAP消息必须签名和加密。从证书库中选择服务器的X.509证书。在 Security页 中 添 加 Security Token Manager,选 择“Username Token Manager”,然后将type改为“CustomToken. Custom Token Manager”,表示由CustomTokenManager类处理用户名令牌。设置完成后,系统将自动更新Web.config和wse3policyCache.config文件中的相关内容。
构建Web服务。在服务器端添加一个Web服务类Service. cs,通过类属性Policy指定ServersPolicy策略。主要代码如下:
(3)客户端开发。在解决方案中添加一个windows客户端应用程序,设置客户端WSE。在Policy页新建名为“ClientPolicy”的安全策略并进行设置:应用类型选择“secure a client application”表示是客户端程序。证书选择用服务器证书,表示用此证书的公钥对用户令牌进行签名和加密。其他设置和服务器端类似。客户端主代码如下:
客户端程序运行后,点击“button1”按钮,客户端应用程序将调用SetClientCredential()方法,将包含用户名和密码的令牌提供给代理类,如果服务器端验证通过,客户端就可以利用代理调用服务器端方法了。至此,服务端和客户端应用程序全部开发完成。
综上,身份验证是Web服务安全的基础,针对目前多种的安全解决方案,开发人员可以根据不同的应用需求,选择不同的安全方案。WSE3.0工具可以提供基于WS-Security等安全规范的完整解决方案,开发人员通过WSE3.0的策略框架来设计安全架构,实现了系统的业务逻辑与安全逻辑的分离,快速实现Web服务的安全需求。