投递文章投递文章 投稿指南 RSS订阅RSS订阅

java2的安全特性及其数字签名的实现

来源:iT堂整理 发布时间:2007-12-14 收藏 投稿 字体:【

摘要: 本文介绍了java2 的安全体系框架及其特性,以及运行机制并详细介绍了在java2中怎样实现数字签名。
 自从java 问世以来,人们对java 平台的安全特性给予了很大的关注,经过几年的发展,java 的安全体系结构越来越完善,特别是1998年11月java2 发布后,其安全体系结构发生了根本的改进。对于终端用户而言,它保护文件和私人数据不被恶意的程序或病毒感染和破坏,鉴别代码提供者的身份。对于开发者而言,通过使用 API方法,能够将安全特性集成到应用程序中,因为API能够定义和集成对特定的资源的使用权限,加密,安全性管理,策略管理,并提供了一些类来管理公钥/密钥对以及公证证书,同时系统管理员,开发者和用户可以使用它提供的工具管理钥匙库,在JAR文件中生成数字签名。下面将讨论java2的运行机制及其基于applet的数字签名的原理和实现。
一 Java2安全体系的运行机制
Java2安全体系在原来JDK1.1的基础上,又提供了很多新特性。
1 保护域(Protected Domain)
保护域是java2安全体系结构中的一个基本概念,一个域可以通过对象集来划分范围,这些对象当前可由一个主体直接访问,主体是在计算机系统中被授予许可的实体。保护域是一种在保护单元间起着分组和隔离作用的便利机制。
保护域通常分为两类:系统域和应用程序域。所有被保护的外部资源如:文件系统,网络设施以及屏幕和键盘等仅能通过系统域来访问。保护域是由现行策略所确定的,一个域包括一组类,这些类的实例被授予相同的一组许可(如下图)。


Java应用程序环境保持了来自代码(类和实例)到它们的保护域然后再到它们的许可的映射,一个线程的执行可能完全发生在一个单一的保护域中,也可能涉及一个应用程序域或者系统域。一个具有较低权限的域不能通过调用一个更高权限的域,或被一个更高权限的域所调用来获得额外的许可。一个域中还包含在该域中授予代码的许可,这是由现行安全策略决定的。
在执行期间,当请求访问一个关键系统资源时,资源处理代码直接或间接的调用一个特殊AccessController类的方法,它可评估该请求并决定是否准予该请求。
一个域单独的由一个代码来源(CodeSource)来鉴别,它封装了在该域中运行的代码的两个特性:代码基址和公共密钥证书集,公钥对应于在该域中为所有代码签字的私有密钥。所以,由相同的密钥签字和来自相同URL的类被放在同一个域中。
2安全检查扩展至所有的java程序;本地代码服从于与Applet相同的安全控制。
3安全策略更易于配置;


二 数字签名的原理与过程
1 数字签名过程
签名是首先计算被签名文件的MD5码(或SHA-1码,java2程序缺省计算SHA-1码),该码经过DSA私有密钥和DSA加密算法加密后,形成数字签名,然后再附加到原文件之后,合并为可以向外发送的传输文件,过程如下图:


2 签名鉴定过程
收件人得到带有数字签名的传输文件后,要对数字签名进行鉴别。鉴别过程如下图,首先取出签名者的公开密钥,数值签名经过公开密钥和DSA解密算法解密后,恢复出原来的MD5码。然后计算文件的MD5码,再与前者比较,如果相同,则文件属实,否则文件或签名已经过改动。


三 Java2中签名的Applet的实现
Java2中的数字签名工具是Jarsigner,策略文件可以用基于GUI的policytool工具来编辑,密钥库为keystore, 生成公私密钥对和保存证书的任务由 keytool负责 。
下面说明签名的Applet的实现步骤:
(一)代码分发端:
1.开发Java源程序并编译;
2.用JAR对类文件和资源文件进行封装;
封装所有包:
Archive-sealed:true
封装特定包:
Name: mywork/utils/
Package-Sealed:true
3.用Keytool产生公钥/密钥对(DSA是Keytool程序缺省的算法),生成X.509V1签名证书,并输出证书;
keytool -genkey -alias myself -keyalg DSA
如果要其它算法如DES算法的密钥,可以用-keyalg选项指定,但由于出口限制,SUN不能向美国以外的国家提供DES等加密算法产生密钥的方法。
可用keytool的-export和-rfc选项把证书发给别人。
一个证书包括:
(1)一个公钥;
(2)一个唯一的名字实体(个人或公司),它是证书的所有者,包括用户名字,公司,组织,城市,地址,国家代码,省份等信息。
(3)数字签名:一个证书被一个分发者的实体签名,保证证书确实包含另一个实体(所有者)的公钥;
(4)分发者的标识名信息;
4.用生成的密钥通过jarsigner工具对JAR文件进行数字签名;
jarsigner archive.jar alias
将archive.jar换成档案名,将alias换成别名,一定要指定与加密密钥有关的别名,因为不能用公钥签名。
(二)代码接收端:
1.用keytool输入证书视其为可信任;
2.用policytool创建和修改安全性策略配置文件,授权请求的访问权限;
3.丛网络取得字节码,用公钥验证数字签名证书和文档代码的完整性;
4.验证字节码的合法性,根据策略文件分配相应权限;
5.执行代码,完成后被垃圾回收器回收内存。

顶一下
(0)
0%
踩一下
(0)
0%
本文Tags:
与《java2的安全特性及其数字签名的实现》相关的文章有:
  • 表情:
  •    
  • 评价:
用户名: 密码: 匿名 注册
最新评论 查看所有评论
About iTtang - 联系我们  - 专题列表 - 友情链接  -  高级搜索  -  帮助中心  -  您的意见