《9远程调用和组件安全》由会员分享,可在线阅读,更多相关《9远程调用和组件安全(62页珍藏版)》请在金锄头文库上搜索。
1、第十章第十章远程调用和组件安全远程调用和组件安全 远程调用和组件,给程序功能的扩充提供了较大的支持。本章主要针对目前比较流行的远程调用方法和常见的组件进行安全讲解。 远程调用(RPC/RMI)为程序的分布式应用开发架构提供了技术支持,它不需要了解底层网络通信协议,在应用层通过网络从远程计算机程序上请求服务。本章首先讲解远程调用的基本原理和安全问题。 ActiveX是微软技术系列中提供的一种控件开发模型,将组件或对象打包,提高了程序的重用性;JavaApplet是采用Java创建的基于HTML的程序,浏览器将其暂时下载到用户的硬盘上,并在Web页打开时在本地运行。本章对这两种技术也进行了安全方面
2、的讲解。 DCOM是在微软技术系列中,以RPC为基础思想建立的组件模型,能让组件以可靠、安全和高效的方式进行网络通讯;EJB是SUN系列中以RMI为基础思想建立的服务器端组件模型,也能部署分布式应用程序,并能充分利用java跨平台的优势。本章对这两种技术进行了安全方面的阐述。CORBA由OMG组织制订,是OMG为解决分布式处理环境中,不同平台、不同语言甚至不同硬件系统之间的通讯而提出的一种解决方案。本章最后对CORBA安全进行了讲解。10.1 远程调用安全10.1.1 远程调用概述传统的网络分布式程序需要进行复杂的底层通信编程,但是有了远程过程调用(Remote Procedure Call,
3、 RPC)之后,开发网络分布式应用程序更加容易了。RPC的出现,让开发者不需要了解底层网络通信协议,直接通过网络从远程计算机程序上请求服务。该技术在1981 年由B. J . Nelson 在其博士论文中提出,后被开放式软件基金会(OSF) 制定为分布式计算环境(DCE) 的分布式计算标准。RPC通信模型是基于客户/ 服务器通信模型的,是一种同步通信方式,即:调用方必须等待服务器响应。在客户端,RPC为远程过程提供了抽象,在调用时,其底层消息传递机制对客户来说都是透明的。在Java系列中,RMI(Remote Method Invocation)技术是远程过程调用的一种实现。RMI使用Java
4、远程消息交换协议(Java Remote Messaging Protocol, JRMP)进行通信。用Java RMI开发的应用系统可以部署在任何支持Java运行环境的平台上。如图是RPC/RMI通信过程:从图中可以看出,在RPC 中,服务以过程的形式放在服务器端,客户负责请求服务,服务器执行客户的请求,运行被调用的过程。RPC 在整个调用过程中需要经过的步骤如下: 1:客户端请求进行远程调用,激活客户端存根,指定目标服务器; 2:客户端存根将被调用的过程和参数打包,作为消息发送给服务器,等待数据消息的返回; 3:服务器接收消息,服务器存根根据消息中的过程和参数等信息,调用服务器端的过程;
5、4:服务器将结果作为消息返回给客户端存根; 5:客户端存根将结果返回给用户。什么情况下适合使用远程调用呢?举一个例子,某公司内部办公系统的结构如下: 客户端使用桌面应用程序。很显然,为了应对数据库的迁移或改变,访问数据库的代码不应该写在客户端,否则会造成大量客户端的改变。此时,访问数据库的代码写在服务器端,作为一个方法或过程的形式对外发布,客户端可在不知道服务器细节,也不知道底层通信协议的基础上,访问服务器端的这些方法,就好像调用自己机器上的方法一样。如果用Java实现,就可以使用RMI技术。当然,RMI还有很多其它的功能,读者可以参考相应文献。 以上面应用为例,服务器端访问数据库(如查询)的
6、代码模拟如10_01_Query.java 。import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class P10_01_Query extends UnicastRemoteObject implements P10_01_QueryInterface public P10_01_Query() throws RemoteExceptionpublic String query() throws RemoteException/查询数据库代码return 查询结果;import
7、java.rmi.Remote;import java.rmi.RemoteException;public interface P10_01_QueryInterface extends Remotepublic String query() throws RemoteException;P10_01_QueryInterface.java的代码为:很显然,服务器端的P10_01_QueryInterface接口内并没有核心代码。接下来将服务器对象对外发布。见代码P10_01_RunServer.java。import java.rmi.Naming;public class P10_01_
8、RunServer public static void main(String args)throws Exception P10_01_QueryInterface queryInterface=new P10_01_Query(); /启动注册表 Runtime.getRuntime().exec(rmiregistry); /将这个对象起一个JNDI名称,放入注册表 Naming.rebind(queryInterface,queryInterface); 运行,服务器端的对象即对外发布。客户端得到服务器端发布的接口,然后远程调用服务器端的方法,客户端代码见P10_01_Client.
9、java:import java.rmi.Naming;public class P10_01_Client public static void main(String args) throws ExceptionP10_01_QueryInterface queryInterface=(P10_01_QueryInterface)Naming.lookup(rmi:/127.0.0.1/queryInterface);String result=queryInterface.query();System.out.println(result);运行,即可调用服务器端的query方法。显示结
10、果为:从上面的例子可以看出,客户端无需知道服务器端的核心代码,只需要知道接口即可。当然,在该例子中,省略了底层的一些通信细节的支持类。以上例子同时说明体现了RPC的其他好处: 1:给程序在异构环境下进行通信提供了可能(异构主要可以体现在: 网络环境中的多种硬件系统平台;网络环境中的多种硬件系统平台; 硬件平台上的不同的系统软件;硬件平台上的不同的系统软件; 不同的网络协议或网络体系结构连接;等等。不同的网络协议或网络体系结构连接;等等。 2:在异构网络环境下,需要把分散在各地的计算机系统集成起来,充分利用系统中分散的计算资源,由网络中的多台计算机协同工作完成某一任务,RPC也给这种需求的实现提
11、供了可能。例一:HelloWordwHelloTask接口: public interface HelloTask public String execute(); import java.io.Serializable; public class HelloTaskImpl implements HelloTask,Serializable private static final long serialVersionUID = 1L; public String execute() return Hello World; wHelloTaskImpl 代码:例一:HelloWord imp
12、ort java.rmi.RemoteException; public interface IHello extends java.rmi.Remote String say(HelloTask task) throws RemoteException; wIHello接口代码:例一:HelloWordw服务器端代码为:例一:HelloWordw客户端代码为: import java.rmi.Naming; public class HelloClient public static void main(String args) try IHello hi = (IHello) Naming
13、.lookup(rmi:/127.0.0.1:2500/hello); HelloTask task = new HelloTaskImpl(); for (int i = 0; i 10; i+) System.out.println(hi.say(task); catch (Exception e) e.printStackTrace(); w运行结果为:例二客户端通过服务器端执行算术运算,Calculator接口的代码为:import java.rmi.Remote;public interface Calculator extends Remotepublic long add(lon
14、g a, long b)throws java.rmi.RemoteException;public long sub(long a, long b)throws java.rmi.RemoteException;public long mul(long a, long b)throws java.rmi.RemoteException;public long div(long a, long b)throws java.rmi.RemoteException;CalculatorImpl.java实现了Calculator的接口,代码为:import java.rmi.server.Unic
15、astRemoteObject;public class CalculatorImpl extends UnicastRemoteObject implements Calculatorpublic CalculatorImpl()throws java.rmi.RemoteException super();public long add(long a, long b)throws java.rmi.RemoteException return a + b;public long sub(long a, long b)throws java.rmi.RemoteException retur
16、n a - b;public long mul(long a, long b)throws java.rmi.RemoteException return a * b;public long div(long a, long b)throws java.rmi.RemoteException return a / b; 例二服务器端代码CalculatorServer.java为:例二import java.rmi.Naming;public class CalculatorServer public CalculatorServer() try Calculator c = new Calc
17、ulatorImpl(); Naming.rebind(rmi:/localhost:1099/CalculatorService, c); catch (Exception e) System.out.println(Trouble: + e);public static void main(String args) new CalculatorServer(); 例二客户端的代码为:w运行结果为:10.1.2 安全问题RPC提供了具有强大的网络编程功能,给编程带来了极大方便,并为分布式计算提供了支持,但是还存在一些安全问题。主要体现在: 1:攻击者可能会恶意地调用RPC服务器中的过程,或者
18、输入一些恶意的数据导致服务器失效。由于RPC 处理过程中,底层使用的仍然是TCP/IP协议,而TCP/ IP协议本身存在缓冲区溢出的问题,攻击者就有可能利用这一漏洞,对系统进行攻击。一般情况下,RPC使用的是135端口(RMI使用的是1099)。攻击者可伪装成合法客户端,向RPC端口传送信息,并让该信息溢出服务器端的RPC 缓冲区,如果客户端发送的信息经过了精心的设计,那么足够有可能来执行恶意的代码。通常,如果服务器被攻击,一些基于RPC服务,如DCOM,都将无法正常运行。更有甚者,攻击者有可能获得对远程服务器的完全控制,对服务器随意执行操作, 如:安装程序、篡改数据、格式化硬盘、创建用户或增
19、加权限等等。通常利用以下方法来解决此问题: 利用防火墙封堵端口。可以设置防火墙的分组过滤规则,过利用防火墙封堵端口。可以设置防火墙的分组过滤规则,过滤掉滤掉RPC端口和影响到端口和影响到DCOM 函数调用的数据包,通过这函数调用的数据包,通过这种方法,可以避免防火墙内的系统被外部攻击。种方法,可以避免防火墙内的系统被外部攻击。临时禁用某些服务,如临时禁用某些服务,如DCOM。如果因为一些特殊原因无法。如果因为一些特殊原因无法过滤过滤RPC端口,也可临时关闭端口,也可临时关闭DCOM服务,来保证网络安服务,来保证网络安全。不过,该方法将会导致系统运行异常,因此一般不建议全。不过,该方法将会导致系
20、统运行异常,因此一般不建议使用。有关方法大家可以参考相关文档。使用。有关方法大家可以参考相关文档。 2:客户端和服务器之间传递的信息可能被窃听;攻击者可能会对传输中的数据进行篡改。因为在RPC 通信机制中,调用组件和返回客户信息都是通过传送消息进行,由于消息在传送过程中采取的安全措施是比较简单,很容易被非法用户截获,造成信息泄密。为了保证网络系统中的消息信息的安全,我们可以采用数据加密和解密的方法来实现。这里我们可以采用加密解密与数字签名来实现,该方法在后面的章节中将会有详细的叙述。 10.2 ActiveX安全10.2.1 ActiveX概述ActiveX,也称ActiveX插件、组件或者控
21、件,为开发人员和用户提供了一个快速而简便的方法,将某些内容和功能集成在一起。它是一些软件组件或对象的集合,可以被重用地包含在应用程序中执行。以WEB网页为例,ActiveX组件实际上一些可执行的代码的集合,可以复用,这些可复用的组件可以被嵌入到网页中,当客户请求时,被客户端浏览器下载,在客户端执行。一般这个组件可以为EXE文件、DLL文件或者OCX文件等。随着Web程序的发展,ActiveX在Web中的应用越来越广泛,在缓解B/S模式服务器端负担方面,作出了较大贡献。比如,在一个股票查询页面中,用户希望得到以某种图表形状显示的结果,传统的 WEB 程序中,该图表必须由服务器根据查询的数据生成之
22、后送给客户。由于图片占用空间较大,因此服务器端的响应很慢,给客户一个不好的用户体验。如果使用ActiveX,则可以将画出各种图表的功能写在ActiveX内,客户查询时,该控件被下载并注册到客户系统上,服务器只需将查询的结果数据传递给客户端,图表生成工作由客户机上的ActiveX控件来完成,大大减少了用户等待时间,减轻了网络带宽的压力,释放了服务器的负担。以Web程序为例,ActiveX的运行过程为: 由于具有可重用性方面的优势, ActiveX被广泛应用,ActiveX的开发工具逐日增加。由于在Microsoft系列中,ActiveX不依赖于语言,所以传统的开发工具基本上都能开发。如Delph
23、i、Visual Basic、Visual C+、.NET等,都可以成为ActiveX的开发工具,整个过程比较简单。不过,目前,只有windows系列的操作系统才支持ActiveX的运行,在浏览器方面,也只有IE提供了对ActiveX的有效支持。如果使用的是其他浏览器的话,必须配置第三方所提供的插件才能支持ActiveX控件。10.2.2 安全问题如前所述, ActiveX控件实际上就是一个可执行文件,提供了特定功能,具有某些属性、某些方法,甚至具备外界可以捕获的事件,方便了应用的开发和执行。ActiveX的安全问题主要体现在:ActiveX控件由于可以被嵌入到某些程序中,因此可能在客户的计算
24、机上运行。如果攻击者在ActiveX内编写一些恶意代码,就可能在用户执行这个ActiveX时,攻击其计算机。如: 客户运行程序时,不知不觉被格式化硬盘;客户运行程序时,不知不觉被格式化硬盘; 客户浏览网页时,注册表被修改;客户浏览网页时,注册表被修改; 客户的保密信息被后门传往攻击者的服务器;客户的保密信息被后门传往攻击者的服务器; 客户硬盘被共享;等等。客户硬盘被共享;等等。 该问题一般出现在Web程序中,对于用户来说,可以通过以下方法解决: 1:在使用ActiveX控件时,必须确认其签名; 2:不能让ActiveX控件被自动下载,下载前必须有提示; 3:不下载未签名的ActiveX控件;
25、4:如果要求非常严格,可以禁用任何ActiveX控件;等等。 具体的做法,可以在IE的“工具”“Internet选项”“安全”中的“自定义级别”中,进行设置。如图所示: 10.3 JavaApplet安全10.3.1 JavaApplet概述和ActiveX在Web程序中的应用一样,Java系列也推出了相应的技术,那就是Java Applet。Java Applet是用Java语言编写的,基于HTML的小应用程序,也可以直接嵌入到网页中,并能够产生特殊的效果。当客户端访问服务器Web页时,客户端浏览器就会下载Java Applet,将其暂存到用户的硬盘上,并以一定的生命周期在本地运行。关于Ja
26、vaApplet的基本知识,可以参考相关文档。 Java Applet的运行过程为: 不过,要使用Java Applet,其前提是用户使用的浏览器必须支持Java,这可以通过安装一些Java运行插件来实现,当前流行的网络浏览器,基本上都可以通过一些手段让其支持Java。同样,以股票查询系统为例,将图表生成的工作交给Java Applet在客户端实现,可以减少用户等待时间,减轻网络带宽的压力,释放服务器的负担。P10_02.java是一段简单的Applet代码。 编译,接下来在一个网页文件中嵌入其.class文件。运行该网页,效果如下: 10.3.2 安全问题由于Java是一门安全性要求很高的语
27、言,因此,Java Applet安全性比ActiveX要好一些,默认情况下,Java Applet的安全限制如下:1:Applet放在客户端,但是不能在客户端执行任何的可执行文件;2:Applet不能读写客户端文件系统中的文件;3:在通信方面,Applet只能与它下载的源服务器进行通信,而不能与网络上其他的机器通信;4:在获取敏感信息方面,Applet只能获取客户端计算机的部分信息,如操作系统名称和版本号、文件及路径分隔符等,而不会泄露其他敏感信息,如注册表、系统安全配置等;5:此外,Applet还可通过数字签名进行不同的安全授权;关于数字签名的知识,后面的章节具有详细的叙述。因此,对Appl
28、et的安全问题,可以考虑得简单一些。10.4 DCOM安全10.4.1 DCOM概述分布式组件对象模型(Distributed Component Object Model, DCOM),是Microsoft技术系列中推出的一种远程组件调用模型,它的底层实现是基于RPC的。实际上,DCOM是组件对象模型(Component Object Model, COM)的进一步扩展。在DCOM体系结构中,具有两个重要的参与者: 服务器端。服务器端实现具体的业务逻辑,对外提供接口,服务器端。服务器端实现具体的业务逻辑,对外提供接口,以服务的形式发布;以服务的形式发布; 客户端。客户端程序对象能够请求服务器
29、上发布的服务,调客户端。客户端程序对象能够请求服务器上发布的服务,调用接口,实际上调用服务器端的业务逻辑。用接口,实际上调用服务器端的业务逻辑。服务器端和客户端程序可以不在同一台机器上。DCOM客户端对服务器端的调用相对简单,不用考虑底层网络协议的细节;而服务器端也不需要考虑数据怎样传输给客户端,只需集中精力于业务逻辑逻辑的编写。因此,可以说DCOM为局域网、广域网甚至Internet上不同计算机的对象之间的通讯提供了一个良好的模型。特别是对于分布式计算的情况,使用DCOM可以达到良好的效果,满足应用的需求。另外,DCOM在配置上也比较方便。客户端和服务器的通信过程中,如果要改变两者之间的连接
30、或通信方式,DCOM无需改变源码,也无需重新编译程序,只需要改变配置即可。 以一个典型的远程调用服务的项目为例,DCOM运行的基本架构为: 在该架构中,应用服务器和DCOM服务器不在同一台机器上,两者之间通过接口进行通信。在Microsoft系列中,DCOM是语言无关的,很多语言都可以用来创建DCOM组件,很多语言,如Java、Visual C+、VB、Delphi等也都可以很好地和DCOM发生相互作用。由于DCOM的语言独立性,应用系统开发人员可以选择自己最熟悉的语言和工具来进行开发。10.4.2 安全问题DCOM的安全问题主要体现在以下几个方面: w1: DCOM充分使用了Windows
31、NT提供的安全框架。因此,原则上讲,在服务器端组件和客户端,DCOM无需进行安全性设计和编码工作,就可以为分布式应用提供安全性保障。因此,可以说,缺省情况下,DCOM提供了一个有效的安全性机制,开发人员在开发分布式应用时,不需要担心安全问题。w2:对于某些应用系统,如果需要确定方法级的用户访问控制,则使用组件级的访问控制列表就不够了。如一个DCOM中有两个方法:查看事务和修改事务,这两个方法的访问权限由不同的用户持有,此种情况下,安全策略为: 将所有的用户名以及其许可和策略保存在数据库内;将所有的用户名以及其许可和策略保存在数据库内; 当客户端调用一个方法时,服务器端组件获取其用户名,在自己的
32、数据库当客户端调用一个方法时,服务器端组件获取其用户名,在自己的数据库中查找有关的许可和策略;中查找有关的许可和策略; 根据客户端的身份,服务器端组件仅仅执行允许该客户执行的安全对象中根据客户端的身份,服务器端组件仅仅执行允许该客户执行的安全对象中的某些操作。的某些操作。提示:用户的许可和策略保存在数据库中,用户不必要为其安全性担心,因为用到的是Windows NT内置的安全性框架。由于篇幅所限,本章无法对DCOM安全问题进行更加深入的研究,读者可以参考相关文献。 10.5 EJB安全10.5.1 EJB概述企业级Java Bean(Enterprise Java Bean, EJB)是sun
33、技术系列中提供的服务器端组件模型,也可以用于部署分布式应用程序。由于它具有跨平台的优点,在大型系统和对事务要求较高的系统中比较常见。EJB是JAVAEE的一部分,基于Java技术,定义了一个开发分布式应用程序的标准。当软件系统的规模扩大之后,传统的两层结构难于维护,而EJB的使用,促进了多层结构的发展,使得层与层之间的耦合性大大降低。EJB是中间件的一种实现方式,和其他的中间件相比,EJB还具有如下优点: w1:对象缓存机制。在访问量较大,对性能要求较高的系统中,对象缓存机制能够大大提高系统性能,但是程序员如果自己编写对象缓存机制,要考虑到很多底层的安全问题,并不容易(如要考虑线程安全和并发控
34、制等问题),可能将其精力从业务逻辑的编写中分散出去。而EJB容器中提供了自动的对象缓存机制,无需另外编写代码,就可以利用服务器的特性。 w2:事务机制。同样,在安全性要求较高的系统中,事务控制关系到系统的稳定,如果程序员自己编写事务程序,也比较消耗精力,并且不容易编写得很安全。EJB提供了非常全面的事务机制,程序员只需要简单配置事务控制策略,也不需要编写任何代码。wEJB分为3类,分别是: 会话会话Bean(Session Bean)。会话。会话Bean用于实现业务逻辑,用于实现业务逻辑,可以设置为有状态的,也可以设置为无状态的;可以设置为有状态的,也可以设置为无状态的; 实体实体Bean(E
35、ntity Bean)。实体。实体Bean用于实现对象关系映射,用于实现对象关系映射,将数据库表中的记录映射为内存中的将数据库表中的记录映射为内存中的Bean对象。对对象。对Bean的的实例化、删除、修改、查询能够和数据库同步;实例化、删除、修改、查询能够和数据库同步; 消息驱动消息驱动Bean(MessageDriven Bean。消息驱动。消息驱动Bean能能够接收客户端发送的够接收客户端发送的JMS消息然后处理,实现异步的功能调消息然后处理,实现异步的功能调用。用。EJB中,组件之间也是用接口进行通信的。以EJB2.0远程接口调用EJB对象为例,EJB的运行过程为: 关于EJB编写的一些
36、其他问题,读者可以参考相关文档。10.5.2 开发安全的EJB EJB 开发过程中的安全问题体现在以下几个方面: w1:由于EJB容器已经提供了较好的安全保障,理论上讲,EJB 的业务方法源代码中,不应该包含与安全相关的逻辑。w2:EJB可以提供对受保护资源的受控访问。对于组件级别的授权和身份验证,可以在EJB打包时的部署描述符中配置。w3:EJB中允许设置其安全角色,部署EJB时,将安全角色映射到安全标识(如用户标识或用户组等),这样可以批量设置对某些资源的访问。安全角色通常也在部署的描述符中配置。以下例子中指定了两个安全角色:customer和admin: . customer custo
37、mer admin admin . 4:EJB中允许声明调用某个方法的权限,来确定某些方法只能由某些角色调用。该声明也是在部署描述符中进行: 上面的配置说明,customer角色可以访问CustomerService内的所有方法,能访问PayService中的getBalance方法。 customer CustomerService * PayService getBalance w5:在EJB中,也可以利用编程的方法来实现安全管理。EJB 层中的编程安全方法由context调用,主要包括以下方法:getCallerPrincipal:返回:返回java.security.Principal
38、 对象,封装了对象,封装了EJB的调的调用者;可以用用者;可以用Principal 的的getName方法得知用户方法得知用户名;名; isCallerInRole:传入一个用户名,返回一个布尔:传入一个用户名,返回一个布尔类型的变量,用于确定调用者的角色。类型的变量,用于确定调用者的角色。10.6 CORBA安全10.6.1 CORBA概述公共对象请求代理体系结构3(Common Object Request Broker Architecture,CORBA)是一种标准的面向对象应用程序体系规范。CORBA由对象管理组织(Object Managemnet Group, OMG)组织制订,
39、是OMG为解决分布式处理环境中,不同平台、不同语言甚至不同硬件系统的之间的通讯而提出的一种解决方案。提示:OMG组织是一个国际性的非盈利组织,其职责是制订工业指南和对象管理规范,为应用开发提供一些公共框架。CORBA实际上是由对象管理组织设立一组编程标准。在这个标准中,定义了一系列API和通信协议,用于达到以下目标: 不同语言编写的应用程序可以通信;不同语言编写的应用程序可以通信; 不同平台下的应用程序可以通信;不同平台下的应用程序可以通信; 对于编程人员来说,通信的底层细节是封装起来的;等等。对于编程人员来说,通信的底层细节是封装起来的;等等。 Cobra实际上实现了不同语言之间的通信。在编
40、写程序的过程中,Cobra中提供了IDL编译器,能够将不同语言编写的程序转换成统一的IDL接口进行发布,IDL接口之间可以实现通信。以Java客户端和C+服务器端进行通信为例,下图展示了其通信过程:wCOBRA标准主要分为3个层次: 对象请求代理对象请求代理ORB。处于。处于COBRA最底层,在最底层,在ORB中规定了分布对象的定义和语言映射与对象中规定了分布对象的定义和语言映射与对象间通讯的实现;间通讯的实现; 公共对象服务。处于在公共对象服务。处于在ORB之上,定义了若干公之上,定义了若干公共服务,如命名服务、并发服务、安全服务、事共服务,如命名服务、并发服务、安全服务、事务服务等;务服务
41、等; 公共设施。处于公共设施。处于COBRA体系最上层,定义了组件体系最上层,定义了组件框架,提供的服务可以直接被业务对象使用。框架,提供的服务可以直接被业务对象使用。10.6.2 CORBA安全在COBRA的调用中,对对象的安全调用是最关键的。CORBA 安全主要体现在以下几个方面: w1:COBRA体系结构中,已经建立了一个完整的体系结构来支持各种安全功能。COBRA安全规范中定义了许多接口来完成这些安全方面的操作或定义。由于这些接口的实现过程比较复杂,因此都是封装起来的,对外提供接口,让用户调用时比较方便。w2:COBRA支持安全策略和安全域的定义。安全策略和安全域对系统的安全需求进行划
42、分, 是具体安全措施执行的基础。其中,安全策略定义了对象的访问控制、授权、不可否认性等安全保护规则,是限制对象的活动、确保系统安全的重要保证;一般说来,系统的保护,首先是基于安全策略的。但是,分布式系统中运行的对象可能有很多个,对每个对象实行安全策略,比较麻烦。于是,在CORBA中定义了安全域的概念,安全域主要用于对系统进行划分。对象安全域是基于安全策略,对一组对象进行管理的一种方式。可以认为,安全域是安全管理的基本单位,安全域中的对象具有类似的安全需求,基于这些安全需求,来利用相应的安全策略保护安全域中的对象。CORBA体系中,安全域还可以划分为多个子安全域,关于子安全域和父安全域的安全策略
43、的重叠问题,读者可以参考相关文献。CORBA安全体系结构,具有良好的特性,能够满足大部分应用系统的需求;不过,也具备一些缺陷,如: 其安全规范建立在其安全规范建立在CORBA 基础之上,无法与其他组件环境,如基础之上,无法与其他组件环境,如EJB、DCOM统一;统一; 对身份的指定不够明确;等等。对身份的指定不够明确;等等。 小结本章主要针对目前比较流行的远程调用方法和常见的组件进行安全讲解。首先讲解远程调用的基本原理和安全问题。然后对ActiveX和JavaApplet也进行了安全方面的讲解。接下来对DCOM和EJB安全方面进行了讲解。最后对CORBA安全进行了讲解。 练习1:编写一个EJB方法控制的代码。2:编写一个不安全的ActiveX,并测试。3:编写一个DCOM方法控制的代码。4:怎样让JavaApplet可以访问本地文件?5:编写一个Cobra程序,体验其安全服务。