当我们谈及 xml web service 时,人们最关心的问题就是其安全性。
xml web service 安全吗?
鉴于安全性涉及诸多方面(例如身份验证和授权、数据隐私和完整性等),以及 soap 规范中根本没有提及安全性这一事实,我们不难理解人们为什么认为答案是否定的。但是,请不要低估了 microsoft@ xml web service。如今,您可以采取许多措施来创建安全的 xml web service。
要解决 xml web service 的安全性问题,我们需要考虑以下问题:
要达到什么样的目的?- 仅允许授权用户访问 xml web service;禁止他人未经授权擅自查看消息等。
如何达到预期效果?- 网络、传输层、os、服务或应用。
解决方案中需要什么级别的互操作性?- 局部或全局。
那么,我们如何确保当今 xml web service 的安全呢?答案就是:先回答上述问题,然后应用保护任何其他 web 应用程序时所使用的相同技术,即:
保护连接安全
对交互操作进行身份验证和授权
正如您下面将要了解到的,这些技术提供了多种选择,您可以将这些选择结合起来以获得额外的效果。例如,可以将防火墙与 xml web service 一起使用,从而根据客户端的身份以及为他们所建立的相应规则来限制对某些功能(方法)的访问。
让我们先来回顾一下保护现有基础结构的各种选择,了解它们的功能。
保护基础结构的安全
一个安全的 xml web service 的核心是安全基础结构。microsoft 提供了广泛的技术,如果把这些技术与总体安全保护计划结合起来,企业就可以有效地保护其 it 结构的安全。正确实施的规划过程包括:
详细了解潜在的环境危险(例如病毒、黑客和自然灾害)。
对与危险有关的安全漏洞的后果进行预先分析并制定对策。
在这种理解和分析的基础上,创建一个精心规划的实现策略,将安全保护措施应用到企业网络的各个方面。
保护连接安全
保护 xml web service 安全的最简单的一种方法就是确保 xml web service 客户端与服务器之间的连接安全。根据网络的范围和交互操作的活动配置文件,我们可以通过多种技术来达到这一目的。最流行也最广泛使用的三种技术为:基于防火墙的规则、安全套接字层 (ssl) 和虚拟专用网络 (vpn)。
如果您确切知道哪些计算机需要访问您的 xml web service,则可以使用防火墙规则将访问限制在已知 ip 地址的计算机范围内。如果需要限制对专用网络(例如公司的 lan/wan)中的计算机的访问,并且不用担心将消息内容保留为秘密(加密),那么这种技术非常有用。防火墙(例如 microsoft internet security and acceleration [isa] server)可以提供先进的基于策略的规则,这些规则可以根据客户端的原始位置或标识,对不同的客户端提供不同的限制。当不同的客户端访问相同 xml web service 上的不同功能(方法)时,这种技术很有用。
安全套接字层可用于在非托管网络(例如 internet)上建立安全连接。ssl 可以对客户端和服务器之间发送的消息进行加密和解密。通过加密数据,您可以防止消息在传送过程中被读取。ssl 先对客户端的消息进行加密,然后将其传送到服务器。服务器接收到消息后,ssl 将对其进行解密并验证消息是否来自正确的发送者(此过程称为身份验证)。服务器或者客户端和服务器可能具有证书,这些证书用作身份验证过程的一部分在连接加密的顶层提供身份验证功能。虽然 ssl 是创建安全通信的一种非常有效的方法,但应当考虑其性能成本。microsoft xml web service 既支持客户端中的集成 ssl,也支持服务器中的集成 ssl。
虚拟专用网络是专用网络的扩展,它可以连接共享网络或公共网络(如 internet)。vpn 使您可以在两台安全连接的计算机之间发送数据。vpn 与 ssl 相似,但 vpn 是一个长期的点对点连接。这使 vpn 可以高效安全地应用于 xml web service,但要求建立长期的连接并保持运行才能达到这种效果。
身份验证和授权
身份验证:身份验证就是验证标识的过程,即验证某人(或某物)与其声称的人(或物)是否一致。该人或物称为“当事者”。身份验证要求证据,称为“凭据”。例如,客户端应用程序可以将密码用作凭据。如果客户端应用程序提供正确的凭据,则认为它与所声称的人或物一致。
授权:完成对当事者标识的身份验证后,便可以进行授权了。服务器通过检查有关当事者的某些访问控制信息(例如访问控制列表 [acl])来确定访问权限。客户端可能具有不同的访问级别。例如,某些客户端可以完全访问 xml web service;而其他客户端则只能访问某些操作。某些客户端可以完全访问所有数据,某些客户端只能访问数据的子集,而某些客户端只能进行只读访问。
在 xml web service 中实现身份验证的一个简单而直接的方法是,利用信息交换所使用的协议的身份验证功能。对于大多数 xml web service 来说,这意味着利用 http 的身份验证功能。将 microsoft internet information server (iis) 和 isa 服务器与 windows 2000 服务器配合使用,能为 http 提供多种身份验证机制的集成支持。
基本身份验证 - 使用客户端的非安全或半安全标识,因为用户名和密码是以 base64 编码文本发送的,而该文本易于解码。如果凭据能与有效的用户帐户匹配,iis 将授予客户端访问 xml web service 的权限。
ssl 上的基本身份验证 - 与基本身份验证相同,唯一区别在于通信通道被加密,从而保护了用户名和密码。对 internet 方案而言,这是一个很好的选择,但使用 ssl 会对性能产生很大影响。
简要身份验证 - 使用散列以安全方式传送客户端凭据。但是,这种方法可能不会受到用于构建 xml web service 客户端的开发人员工具的广泛支持。如果凭据能与有效的用户帐户匹配,iis 将授予客户端访问 xml web service 的权限。
集成 windows 身份验证 - 主要用于 intranet 方案。使用 ntlm 或 kerberos。客户端必须属于服务器所在的域,或者属于服务器域的托管域。如果凭据能与有效的用户帐户匹配,iis 将授予客户端访问 xml web service 的权限。
ssl 上的客户端证书 - 要求每个客户端获取一个证书。证书被映射至用户帐户,iis 将使用这些证书来授权对 xml web service 的访问。尽管目前数字证书尚未广泛使用,但这仍然不失为 internet 方案的一种可行选择。这种方法可能不会受到用于构建 xml web service 客户端的开发人员工具的广泛支持。只能通过 ssl 连接使用这种方法,因此性能可能是一个需要考虑的问题。
从 xml web service 实施者的角度来看,使用上述任何一种身份验证机制都有一个好处,即,无需在 xml web service 中进行代码更改,因为在调用 xml web service 之前,iis/isa 服务器将执行所有的身份验证和 acl 授权检查。但是,在执行客户端时,还需要完成其他一些工作。客户端应用程序需要响应服务器的身份验证凭据请求。
在 xml web service 中进行身份验证的其他方法包括:使用第三方服务(例如 microsoft@ .net passport 中的服务),使用 microsoft asp.net 的会话功能,或者创建自定义身份验证方法。
下一步:互操作性
您可能会发现,如今,用于 web 应用程序安全保护的标准技术可以单独使用或组合使用,以建立安全的 xml web service。这些技术建立在丰富的经验基础之上,并且非常有效。不过,它们并没有在 xml web service 体系结构中提供集成解决方案。随着 xml web service 方案日益复杂(例如跨托管边界以及分布于多个系统或企业中),xml web service 实施者需要创建有效但并不提供普遍互操作性的自定义解决方案。
为满足这些需要并增强 xml web service 的互操作性,microsoft 及其合作伙伴正在制定一套安全规范。该规范建立于 soap 规范的扩展性机制之上,提供集成至 xml web service 结构中的增强型安全保护功能。
这套安全规范的核心是 xml web service 安全语言 (ws-security),它为 soap 消息提供了三种增强功能:凭据传送、消息集成和消息保密。这些功能自身不能提供完整的安全保护解决方案;但 ws-security 是一个构建块,它可以与基础结构和其他 xml web service 协议结合使用,以满足各种应用程序的安全保护要求。microsoft global xml web service 体系结构是 ws-security 和相关规范的主要内容,它为 xml web service 基础结构的发展提供框架。