段智华 ()
年 月
一SOAP简介以及SOAP安全介绍
SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议是一个基于XML的协议它包括四个部分SOAP封装(envelop)封装定义了一个描述消息中的内容是什么是谁发送的谁应当接受并处理它以及如何处理它们的框架SOAP编码规则(encoding rules)用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation)表示远程过程调用和应答的协定;SOAP绑定(binding)使用底层协议交换信息
虽然这四个部分都作为SOAP的一部分作为一个整体定义的但他们在功能上是相交的彼此独立的特别的信封和编码规则是被定义在不同的XML命名空间(namespace)中这样使得定义更加简单
SOAP的两个主要设计目标是简单性和可扩展性这就意味着有一些传统消息系统或分布式对象系统中的某些性质将不是SOAP规范的一部分比如分布式垃圾收集 (Distributed garbage collection)成批传送消息(Boxcarring or batching of messages)对象引用 (Objectsbyreference(which requires distributed garbage collection))对象激活 (Activation(which requires objectsbyreference))
自从SOAP规范从去年发布以来 SOAP规范的加密性认证和授权等安全机制一直受到人们的广泛关注这三个方面对于任何的BB来说都是很重要的 但SOAP标准在制定规范时并没有过多考虑SOAP 的安全性要求因为SOAP一个很重要的设计目标就在于它的简单性尽可能的利用已有的标准和协议来实现相应的功能而不是另起炉灶重新定义一个崭新的协议如果这样的话会大大的降低它的实用性和兼容性
安全性是个复杂的问题在最低层SOAP 消息可通过 HTTPS 传递 通用 SSL 传输信息这就确保被编码消息内容可以避免被窃听也确保客户端和服务器可互相验证身份尽管 HTTPS 解决了对窃听者屏蔽消息的问题但不能满足安全性更高的特殊用户认证的特定 Web 服务的要求比如下面需要SOAP安全的几个场景仅仅依靠SSL的安全机制是不满足信息的安全要求的
端对端的信息传送(Endtoend messaging)SOAP消息可以与不同的运输层协议(如HTTPSMTP等)捆绑在一起进行传输传输的过程中可能经过一系列中间设备或应用程序假如应用程序对SOAP消息进行恶意破坏可以在SOAP消息插入一系列相似的头元素再传给下一个中间设备或程序从而破坏了信息的完整性在这种情况之下中间设备或应用程序是不值得完全信任的它们随时可以修改传输的信息因此SSL/TLS并不能保证端到端传输的安全性
中间件的独立性(Middleware independence)在应用层中保证端对端的安全要求如果在传输中的传输的消息是平文而不是是经过加密 的密文极易受到黑客的攻击但假如在应用程序中进行安全加密的处理需要用户对加密算法有详细的了解有许多不同的加密算法适合不同的安全要求这对于用户来说是额外的负担因此标准的安全的独立的透明的运输层是必要的在SOAP中进行适当的安全扩展保证了中间件应用程序的独立性不用考虑过多的加密算法细节
传输的独立性 (Transport independence) SOAP消息在传输的时候可以与不同的运输层协议进行捆绑如HTTPSMTP协议有可能存在这么一个场景所有的通信连接是安全的中间层应用程序也是值得信赖的但是安全信息需要经过两个运输层协议比如前一段是经过HTTP协议传输在下一个阶段则需要通过SMTP协议进行传输两者之间的转换是烦琐的易出错的因此在SOAP中加入扩展信息保证了运输层的独立性从而使与运输层无关
驻留信息的安全性运输层可以进行安全传输但不能保证信息驻留时也是安全的假如消息保存后继续向前传输驻留信息的安全十分重要在电子商务中常常要求用户填写帐号和密码这些信息通常保留在本地的COOKIE中对于这些持久保存的信息进行加密可通过SOAP的安全扩展来实现
在目前应用最广泛的INTERNET运行着许多基于TCP/IP协议的应用由于TCP/IP协议本身的不安全性造成了这些应用的不安全性如几乎所有的数据在网络上都是明文传输和用户在网络上的身份仅通过IP地址表现由于这两个原因使得一些软件产品的安全工作形同虚设比如一些网络应用通过网络将用户口令传输的服务方由服务方验证用户的合法性由于用户口令在网络上传输是明文的它很容易被网络监听者获取又如一些防火墙进行的IP过滤工作是通过IP数据包中的IP地址来实现的实际上在NTERNET上伪造一个IP地址是相当容易的SOAP协议基于运输层之上有必要通过SOAP的扩展来增强SOAP的安全功能因此我们必须了解当前Internet网络面临哪些威胁以及网络网络安全的要求是什么这不仅仅是SOAP必须考虑的问题也是其他基于Internet网络分布式应用程序必须考虑的只有更好的了解各种无所不在的攻击手段和侵犯方式才能更好的建立安全的防范机制
二互联网络的安全要求以及存在的安全威胁
总的来说网络安全的五个基本的安全要求
机密性(Confidentiality) 保证没有经过授权的用户实体或进程无法窃取信息在 一个开放的网络环境里维护信息机密是全面推广应用的重要保障因此要预防非法的信息存取和信息在传输过程中被非法窃取
授权(Authorization) 授权是确定允许用户做什么的过程可将不同的特权给予不同类型的用户例如每个人都能阅读公共图书馆的联机卡片目录甚至不必是该系统的认证用户换句话说所有用户都被授权可阅读目录但系统可能会将借书的权限仅限于已认证用户这里已认证是指持有此图书馆的有效借书卡取决于认证机制的复杂程度系统可能根据所持的卡来限制用户的特权例如可能授权某些用户可以借的书不限数量而限制其他用户只能借一定数量的书籍
数据完整性(Data integrity)保证没有经过授权的用户不能改变或者删除信息从而信息在传送的过程中不会被偶然或故意破坏保持信息的完整统一因此要预防对信息的随意生成修改和删除同时要防止数据传送过程中信息的丢失和重复
原始性证明(Proof of Origin) 对信息或数据的发送者的进行标示保证信息被经过标示的发送者所传送从而避免以前的数据包被重复发送
防止抵赖(Nonrepudiation): 保证信息的发送者不能抵赖或否认对信息的发送当然信息发送前需要对发送者进行安全认证要在信息的传输过程中为参与交易的个人企业或国家提供可靠的标识
最后的三个安全要求是彼此相关的数据完整性与原始性证明的区别在于数据是完整的并不能保证信息不被重复发送换句话说数据完整性不能防止反复攻击哈希散列算法如 HMAC认证时使用一个经过加密的密钥对于原始性证明来说是合适的但并不适用于防止抵赖
相应的目前网络存在的威胁主要表现在以下几个方面
非授权访问没有预先经过同意就使用网络或计算机资源被看作非授权访问它主要有以下几种形式假冒身份攻击非法用户进入网络系统进行违法操作合法用户以未授权方式进行操作等
信息遗漏丢失指敏感数据在有意或无意中被洩漏出去或丢失
破坏数据完整性以非法手段窃得对数据的使用权删除修改插入或重发某些重要信息以取得有益于攻击者的响应恶意添加修改数据以干扰用户的正常使用
拒绝服务攻击是一种比较简单但又日益流行的攻击和禁用企业信息资源的方法在拒绝服务攻击中作恶者发送大量的信息流量使 Web 服务器主机路由器和其它网络设备负担过重通过这种方式发送的信息流量非常之大致使企业的用户客户和合作伙伴都在好长一段时间内无法访问网络
基于以上的安全威胁以及网络安全的迫切要求仅仅依靠SSL的安全机制不能解决所有的问题SOAP安全的解决方案基于三个WC的XML规范来实现XML Digital Signature XML encryption and XML Key Management ServicesSOAP层安全处于传输层和应用层之上对SOAP层的安全性进行扩展把关于安全的五个基本要求应用到整个的SOAP信息中包括SOAP头以及SOAP体同时更多的安全措施也可结合SOAP层安全与传输层以及应用程序 来共同解决由于网络安全十分复杂目前WC正在尝试制定相应的规范不断的完善和更新下面介绍SOAP数字签名的一个草案
三SOAP 安全扩展: 数字签名
. SOAP Security Extensions: Digital Signature这个文本目前只是WC的讨论方案正处于不断修改的过程中提出此文本的最初设想是利用XML的数字签名(XML Digital Signature syntax [XMLSignature])对SOAP进行扩展在SOAP的头元素中定义签名属性()来实现以下部分是我翻译了WC的SOAP数字签名草案中的一部分以供大家参考如有不当之处敬请大家指正工作组在SOAP头元素的扩展命名空间中加入安全特征通过扩展在方案中加入一个新的元素这个元素在schema中可以不用改变如果要在SOAP协议的进行加密性扩展可以在命名空间中引入适当的标准实现