UML软件工程组织

基于COM+技术的安全性研究
ZHANGJ 来源:天极网
 摘 要: 本文探讨了COM+的安全模型,包括激活控制、访问授权、身份验证、组件运行身份,并给出了在实际例子中各种安全措施的使用方法。

 关键词: 组件;COM+;安全模型;角色
 

1 前言

 COM+是微软公司的分布式互联网络应用结(Windows DNA, Microsoft Distributed interNet Application Architecture)的技术核心。它提供的安全机制使我们可以快速、高效地构筑安全的企业级多层分布式应用系统。程序员无需编写大量的代码就可以将这个新的安全机制使用在分布式应用系统中。

 COM+的安全模型仍然沿用了MTS的基于角色的安全模型,根据用户的角色访问应用的有关功能模块。这种安全模型需要开发人员与管理人员协同完成,在开发阶段,开发人员负责定义各种角色,并且在实现组件功能时,只允许指定角色的用户才可以执行这些功能;在配置阶段,管理员负责为所有的角色指定有关的用户账号。COM+扩充了MTS安全模型,它允许开发人员和管理员指定到方法一级的安全控制,在MTS安全模型中,我们只能在MTS包一级指定安全角色。通过COM+对象环境信息,COM+的安全模型更为细致,因此,基于COM+技术的安全平台对于大部分企业级应用系统不失为一种优先考虑的方案。

 2 COM+的安全模型

COM+所定义的安全模型是由一组相关的接口所定义的。由于COM+的安全模型只是一组相关的接口,所以当其执行在不同的操作系统时,操作系统就会实现这一组安全接口,并提供COM+在这个操作系统中的安全控制。COM+安全模型主要包括以下一些内容:

 激活控制:是指控制哪些用户可以激活应用程序服务器。当用户试着在远程机器上激活应用程序服务器时,COM+的安全机制会检查该客户端是否有权限激活远程服务器的安全控制。

 存取控制:是指在服务器上由适当的用户激活后,控制哪些用户可以存取应用服务器所提供的服务。

 验证控制:主要是控制客户端和服务器端之间传递数据的安全性。严格的验证控制可以让数据在传输时先经过加密。以避免无权限用户的存取。程序员必须决定使用哪一层次的数据安全性,当然设置的安全层次越高,数据越安全,但是程序执行的效率就会受到影响。因此,一般只需要在客户端一开始连接时验证客户端即可。

 鉴定控制:是指一个COM+套件组件中的组件在需要存取其他的系统资源时,使用什么系统账号来登陆到这些资源服务器。只有使用一个合法的鉴定控制身份来登陆这些资源服务器,才能取得它需要的资源。鉴定控制能够控制应用程序服务器是使用特定的用户权限执行的,或是使用目前在客户端登陆的用户的权限执行的。

 3 COM+的身份验证

 COM+身份验证是建立在SSP之上,使用RPC定义的上级验证实现的。客户程序和服务器组件都可以指定各自的验证级别,当客户机要连接COM+服务器时,系统会检查服务器和客户机的验证设置,通过使用COM+安全罩谈判算法选择较严格的验证级别。COM+支持的验证级别如表1所示:

验证级别 说 明
Default 使用通常的COM+安全罩谈判算法自动确定验证级别
None 不验证调用者的身份
Connect 当客户端连结应用程序时验证用户的实体身份
Call 向应用程序中的每个对象发出调用时进行身份验证
Packet 对调用者的每个数据包都进行身份验证
Packet Integrity 对调用者的每个数据包进行散列的校验和
Packet Privacy 在传输过程中对数据报进行加密

我们在使用过程中,不能一味地使用高级别的验证,因为验证级别越高,系统性能代价也越高。因此,应根据组件对安全性的要求,合理选用相应验证级别。涉及关键业务的组件使用高级别验证,普通组件则使用低级别验证,做到安全和性能兼顾和统一。

COM+的访问授权管理

 COM+的安全机制仍然沿用了MTS的基于角色的安全模型,根据用户的角色访问应用的有关功能模块。一个角色可以看成有相同资源访问权限的用户组,每个用户有它自己的角色,同时每个应用系统有各自的角色集合。管理员可使用配置的手段把角色添加到服务应用中,并用相应的账户来装配角色,以实现不同的角色访问不同权限的资源。COM+组件的角色安全机制可以使用两种方式建立:

 (1)宣告式安全机制:在此模式下,程序员不需要为组件的存取撰写任何的程序代码。可以通过MTS/COM+系统的设置来实现。方便灵活,而又有弹性,管理人员可以根据需要随时改变安全机制。

 (2)程序代码控制安全机制:要获得更为详细的安全措施,可在方法的代码中调用IsecurityCallContex、10bject-contet、IsecurityProperyt和接口的方法进行角色和安全检查,这是一种比较精确的安全控制。

 下面通过一个例子来说明和验证角色的两种用法。第一步,在本机上产生一个hello组件, 然后将这个hello组件注册到服务器xuji1上。第二步,产生一个客户端在本机上进行调用hello 组件。发现客户端调用成功。第三步,在com+ 的应用程序hello中的新建角色administrator, 然后在这个角色中添加administrator 用户,同时再新建一个角色zanghj,并将用户zhangjian添加到这个角色中。第四步,在hello 应用程序中的属性中选择安全设置,并选择"强制为该应用程序进行访问检查",并选择在进程级和组件级运行访问检查。调用的身份验证级选择"包", 模拟级别选择"模仿"。第五步,在hello 应用程序下选择组件hello,右键选择属性,选择安全设置,选择zanghj.第六步,(以administrator 登录)现在调用客户端,发现不能调用错误码为权限访问错误。第七步,现在注销administrator,以zhangjian 登录,然后调用组件,发现调用正常。

5 COM+组件身份的扮演与掩盖

 当表示层的基客户调用服务器组件时,服务器组件将以基客户的安全证书确定调用的权限。但实际情况往往更为复杂,企业应用程序通常是三层或多层逻辑结构,服务器组件还要调用其他的服务器组图1的例子表示了这种情况:



 基客户程序C调用组件S1, S1调用组件S2, S2调用组件S3,有三个调用分别为C1、C2、C3。对于调用C1来说,以C的安全证书检查C1调用的权限。但调用C2使用C的安全证书呢?还是使用组件要S2自身的安全证书呢?如果使用S2的自身身份代替C的身份进行调用,则称为组件身份的掩盖。如果仍然使用C的身份,表示S2假扮了C的角色,称为组件身份的扮演。主要基于性能上的考虑,掩盖是COM+技术的缺省配置,如果不显式地申明,以C2和C3分别使用S2和S2的身份安全证书。在某些特殊的场合,可能需要使用扮演的方法将C的安全证书送到S2、S3所在机器上,例如在多层应用系统中最终组件要对调用它的客户标识进行检查。COM+组件可使用的扮演级别如表2所示:

级 别 说 明
Default 使用通常的COM+覆盖协商算法自动选择扮演级别
Anonymous 不允许服务器对象知道客户端的实体身份
Identity 允许服务器对象知道客户端的实体身份
Impersonate 允许服务器知道客户端的实体身份,并可以模仿客户端的实体身份执行客户端可以执行的任何操作
Delegate

服务器组件可扮演客户进行身份检查,并可访问系统对象,也可代表客户调用其他组件

上例中,S2使用标识级扮演和模仿级扮演可用C的身份调用S2,但不能调用S3。如使用代理级扮演,则可一直向后传递C的用户身份到S3。与使用组件身份掩盖不同的是,使用组件身份扮演,需要在组件方法函数中显式编写代码。例如在多层次应用系统中,最终组件要对调用它的客户标识进行检查。

 6 结束语

 通过提供易用的安全性管理基础结构,COM+使安全性管理成为一项轻松的工作。COM+的安全性基于一种直观而崭新的安全思想,它就是基于角色的安全性。基于角色的安全性极大的简化了应用程序安全性的管理和配置。它有如下的一些特点:

 (1)COM+基于角色的访问控制在不需要编码的情况下提供了极大的灵活性。它可以对接口的方法一级进行访问控制。

 (2)基于角色的安全性提供了一种可伸缩的解决方案,它不依赖于系统包含的用户数量。可配置的基于角色的安全性是一种全面的解决方案,它简化了安全策略的更改。


版权所有:UML软件工程组织