当前位置:编程学习 > JAVA >>

深入理解Java安全模型

Java2 中引入的Java安全模型是具有高安全性的Java企业应用的基础。该模型基于一个可订制的“沙盒”,它消除了Java软件程序对系统或用户潜在风险使得可以在里面安全运行。Java安全技术包括大量APIs函数、工具集以及常用安全算法、机制与协议的实现。

Java安全模型的体系结构

Java 2的安全平台有两部分组成:Java 2 安全体系内核与Java加密体系(JCA)。这两部分如图A所示,其中低层组件就是Java2 安全平台的这两个主要部分,上层组成了安全扩展。

这三个安全扩展到Java 1.3.1才可单独获得,但是从Java 1.4开始,它们就被集成为J2SE。

Java 2 安全体系内核

这是Java平台的一部分,它包括:字节码验证器、类加载器、安全管理器、访问控制器、访问权限管理器和策略描述工具等。下面让我们来看一下Java代码在Java2安全体系内核组件中的执行过程。

首先字节码验证器检查代码是否满足Java语言规范。这个任务包含两步:(1)字节码验证器分析字节码的顺序;(2)字节码验证器检查对其它类的引用。例如,如果一个类要访问另一个类的方法,字节码验证器就要检查该方法是否为public。字节码验证器的典型操作包括:检查字节码的顺序是否以0XCAFEBABE开始,是否丢失字节,最后的类是否包含子类(它们不应该包括),方法的参数类型是什么等。

如果一切正常,接下来类加载器将字节码翻译成java类,然后由java虚拟机(JVM)执行。如果需要加载一个特别的类可以定义不同的策略加以说明。通过委托给安全管理器的方式如果某个类可以访问特别的系统资源,那么类加载器和java标准类也可以定义决策权。

安全管理器是一个可有开发人员实现的特殊类,用于指明一个类是否可以访问指定的资源(例如,文件访问或网络连接)。为了做出决策,安全管理器需要分析请求来源。如果访问被拒绝,将会抛出一个java.lang.SecurityExceptin异常,否则的话,将会以通常的方式处理该调用。(以后我将会写另外一篇文章介绍如何创建定制的安全管理器)。

为了增加灵活性,应用可以使用另外一个专门的机制——访问控制。Java平台提供了另外的低级安全特性如自动内存管理和强数据类型。这将会使得代码更健壮,减少了内存出错和可能的漏洞。访问权限控制是Java2安全系统最重要的提高,java.security包中包含了来自java2安全体系内核的类与接口。

JCA

它提供了Java平台上执行主要加密服务的基础设施,包括数字签名,信息摘要,密码,信息认证码密钥生成器和密钥生成器。同时JCA还保证了数据完整性并提供了显示全部特性的APIs。

JCA是与Java安全平台相关的内建Java包的一部分,但是由于它的面向服务的特性,因此它是独立的。笼统说来, JCA仅仅是一个接口,可以有很多该接口的实现。从Java 1.4开始,Sun 微系统提供了它们自己的JCA实现,并且它完全集成到了标准Java包中。

它支持很大范围的标准算法包括RSA、DSA、三重DES、SHA、PKCS#5、RC2以及RC4。JCA是可扩展的,丰富的API可用于构建安全的应用,而其它还是算法与实现相互独立的,使用基于提供(可插拔)的体系结构。

扩展

Java平台包括大量内建的工具,构成了目前广泛应用的安全服务基本集。然而,一些应用可能依赖于新出现的标准而不是已经实现的,或者依赖于所提供的服务。Java平台支持安装实现这种服务的定制工具。Java加密扩展(JCE)、Java安易做图接扩展(JSSE)和Java认证与认证服务(JAAS)是一些主要的可插拔协作组件。

JCE

这是Sun微系统公司对数据块加密与解密的扩展,也是JCA实现的一部分。JCE是根据美国加密技术出口于第三方国家的条件对Java的扩展。

JSSE

安易做图接层(SSL)已经成为应用最为广泛的通过加密保证数据完整性的数据协议。JSSE是一个标准接口和对SSL协议的实现。开发人员可以使用另外一个商业化的SSL实现,而且通用JSSE接口仍旧可以使用。最新的Java平台包含了其它的安易做图接协议,如传输层安全(TLS)、Kerberos和简单认证与安全层(SASL)。同时JSSE还包括SSL/TLS上的HTTPS支持。

JAAS

它实现了基于用户认证的访问限制。和访问控制一起,它们提供了抽象的认证APIs函数,这些函数通过可插拔体系结构集成了各种登录机制。同时还提供了全面的策略与许可API,使用这些API允许开发人员创建和管理对安全敏感资源具有良好的访问控制的应用。

它的一个重要特点是可以根据用户身份或代码签名实现多种认证机制单一登录服务和良好的资源访问控制。近来对于时间戳签名(始于Java5)的支持使得实施代码签名更加容易,避免了当签名证书过期时需要重签的麻烦。

 

补充:综合编程 , 安全编程 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,