2002-09-17 09:13
用户认证和数字证书为Web服务保安全
这是Web服务安全体系结构系列技术文章中的第二篇。第一部分介绍了一家虚构的公司:因特网字典公司(TIDC)及其客户RegalResearch.com。RegalResearch公司采用了一种Web服务把TIDC的功能集成进它自己的网站。第一篇文章介绍了保证TIDC Web服务安全的IP阻塞技术。在本文里,我们继续讨论另外两种技术:用户认证和数字证书。
用户认证
用户认证是一种从数据库到操作系统等各类软件中都很常见的安全防范技术(参看图A)。用户认证从概念上来说是非常简单的:系统的每一位用户都被分配了一个唯一的用户名。对关联该用户名的资源或功能的访问都要接受特定口令的保护。因为大多数用户已经非常习惯这种安全技术,所以普遍存在的用户认证系统对Web服务的部署是非常有益的。不论你的Web服务是否正被其他Web开发人员或者一般公众使用,这种安全机制都很容易得到理解。
图A
用户认证可以实现Web方法的单独使用
给Web服务应用用户认证安全机制非常简单:每一种Web方法调用都要求额外的两个参数即可,这就是用户名和口令。只要调用了Web方法,第一步就是在数据库中检查用户名是否存在。第二步则是保证所提供的口令同指定用户名的口令匹配。如果这些检查都得以通过,那么Web方法的操作也才可以继续进行。如果在这些检查步骤中哪怕只有一步过不去,则Web方法需要给主调函数发送错误消息。
我们可以对这种技术做一点小小的改进,这就是常见的用户识别码,通常的用户识别码就是一个全局唯一标识符(GUID)。在这种情况下,除了标准参数之外Web方法还会接受参数UserID。这种途径同采用用户名/口令组合机制同样有效,这是因为GUID很难复制。在大多数情况下,随机找出用户的GUID比基于字符串的口令要难得多。因为许多数据库都能自动地产生GUID,所以这也是最为流行的安全技术之一。不过,这一技术也不是没有问题,其主要的缺点是用户或者开发人员很难记得GUID,特别容易敲错。
优点
用户认证机制的主要优点是它可以为创造出更复杂的授权方案提供选择。记住,所谓的认证(authentication)是证明用户身份的过程,而授权(authorization)则是标识认证用户可访问资源的过程。由于每一种Web方法都认证提出请求的特定用户,所以,创造出一种复杂的授权方案使得用户只能使用部分Web方法是可能的。在这种情况下,证实用户身份以后,每个Web方法都将检查认证用户是否有权访问给定的Web方法。如果没有相应的授权权限,那么就应该向用户提出第3类错误信息。
缺点
当然,缺点也是有的。使用用户认证方案最明显的问题就是用户在每次调用方法的时候必须包括一个或两个附加参数。当服务器端Web应用(例如ASP或JSP)做这个工作时当然不算什么问题。然而,当人们通过WSDL页或类似的前端直接调用Web方法时,这项工作就实在太令人感到乏味了。
另外还有个令人担心的地方,在使用用户认证时需要在Web服务器上存储用户名/口令。由于这些信息通常存放在数据库里,所以需要额外的存储空间和服务请求,这就影响了Web服务的性能。同时,存储这类数据还可能把敏感的客户信息暴露给企业职员和黑客。对那些把数据库用做基本功能组成部分的Web服务而言,这一担心倒还可以通过体系结构和开发的精心设计来解决。而对那些不需要数据库的Web服务来说,仅仅是创造和维护用户认证的代价就够受得了。
数字证书
保护Web服务安全的另一种技术就是数字证书了。数字证书是安装在客户机上的小型软件,其作用是验证客户的身份(参见图B)。这种身份验证工作由第三方来完成,例如Verisign公司就可以采用产业标准的加密技术为每个客户创建一张唯一的证书。随后,在客户请求某种Web服务时证书也会被传递。Web服务对数字证书进行检查并依此作出反应。
图B
数字证书安全地识别用户
数字证书在使用方式上类同于IP阻塞,对整个网站来说“要不接受要不拒绝”。每一种Web服务通常都会调用专门的单一函数对随请求传递的证书进行检查。如果函数执行结果表示没有传递证书则Web服务失败并且返回一条适当的错误消息。如果证书存在,那么函数功能则照常执行。在这种情形下,数字证书同IP阻塞在服务器端的配置和维护的简易性方面倒是完全一样的,而且配置非常灵活。
优点
数字证书相比IP阻塞具有更为显著的优点。同用户认证一样,对数字证书的安全检查直到实际调用Web方法的时候才进行。这样服务的访问者仍然可以查看Web服务的WSDL页或者有关的网页。这一优点的好处在于,有关的方法不再需要包含安全检查代码。如果你忘记在Web方法中包括这些检查代码,则该方法对任何想使用它的人都可用。
因为你必须在每个Web方法中包含认证代码,所以许多开发者趁机拓展了以上描述数字证书的简单用途。数字证书能在客户机上保存用户个人的大概的信息,因此这些代码在功能上类似于用户认证所需的代码。通常包含在数字证书中的常见信息就是用户的电子邮件地址。由于邮件地址的唯一性,所以它也可以很方便地用做数据库内的标识键。而且,因为证书既安全又唯一,所以用户无需提供口令。这样一来,用户这一方就不需要再做其他操作了,什么审核什么方法级的授权页通通不需要用户来关心了。这是提高用户友好性的一大举措。
缺点
数字证书的主要缺点就是安装比较困难。大多数用户很不情愿因为浏览某个网站就得下载并安装数字证书,因此在某些状况下(例如,B2B通讯和安全的内联网)就限制了证书的可行性。数字证书还把用户限制在了单一计算机上。即使我已经在工作用计算机上安装了一张数字证书,可我要想通过自家电脑访问Web服务却还得再安装第二张证书。最后,数字证书从来不为认证目的而从用户那里获取输入信息;认证的是某台机器而非坐在这部机器前的人。如果某人坐在我的计算机旁,Web服务会假设是我正在使用服务。
继续
在这一系列的最后一篇文章中,我们将主义比较以上三种保护付费Web服务的安全技术,然后,再讨论下其他提供一般Web服务安全性的技术。