疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

用JAVA做数字签名之二


 

---- 3. 数字签名的功能
 
---- 一个数字签名是一个定长的二进制数字流,其内容附着于被签名的数据之上。它可以和任何种类的数字数据一起使用,除最普通的代码软件外。还可用在口令、电子邮件及电子文档中。数字签名的主要功能为:防止原始文档被污染或变更;防止别有用心者使用他人名字散布欺骗性消息;以及,提供谁是文件原作者的证据,等等。
 
二、用JAVA创建及使用数字签名
---- 除了上面提到的功能外,用JAVA做数字签名还有更现实的意义。最常见的是:应用数字签名可以突破浏览器在安全性方面的某些限制。例如,你的浏览器一般会拒绝网上的JAVA程序读写你本地硬盘的文件或获取你的本地信息(如你的用户名称等),哪怕你确认该JAVA程序是“可靠的”(其实你不可能完全确认来自网上的某个程序真的是“可靠的”)。若你确要运行该JAVA程序,你必须关闭浏览器的安全检查功能,但这无异于将本地系统置为“不设防的城池”。使用数字签名可完美地解决这个问题:当浏览器“感觉”到你使用的是签名后的JAVA小程序后,它会自动搜索与之匹配的数字签名并进行校验,若成功则浏览器认定该JAVA小程序是“值得信任的”,于是放行。这样,既保证了安全性,又可以让真正“可信的”的 JAVA程序拥有许多特权(见下述JAVA程序)。
 
---- JDK1.1 中,与数字签名有关的工作是由工具程序 javakey 来完成的。 javakey Sun 提供的一个命令行工具,用来为存档文件(jar 文件)生成数字签名并管理密钥数据库。
 
---- 下面我们将通过一个具体例子来看一看创建和使用数字签名的步骤,有关概念和解释将在例子中给出。
 
---- 1. Java 程序及数字签名的创建(加密方或签字者应执行的步骤)下面的JAVA小程序非常简单,它的主要功能为:获取 Win95/98系统当前登录用户的名称字符串,然后将之写入本地硬盘当前目录的 Test.Txt 文件上。
 
  ... ...
 
---- MyApp.java 编译为 MyApp.class 后,用下面的 MyApp.html 送往浏览器(命令为 appletviewer MyApp.html)。
 
  ... ...
 
---- 我们发现浏览器上显示的是“You can NOT write to disk or get User Name”。这是因为获取用户名和写本地硬盘均是系统安全特性所禁止的。
 
---- 下面我们创建一个数字签名,以便该程序的使用者无须变更浏览器的安全检查特性就能完成程序功能(即:读用户名,写入文件)。
 
---- 第一步:创建一个实体,并将之设为“可信的”。
 
... ...
 
---- 第二步:生成密钥对(公共密钥和私有密钥)并输出至文件(可选)。
 
... ...
 
---- 第三步:生成一个许可证(certificate)。
 
... ...
 
---- 第四步:创建存档文件( jar 文件)。
 
... ...
 
---- 第五步:对存档文件进行签名。
 
... ...
 
---- 第六步:更改文件名。
 
... ...
 
---- 2. 数字签名的使用(解密方或使用者应执行的步骤)
 
---- 第一步:得到许可证(即数字签名 -- Kompass.key)和签名后的文件。
 
---- 第二步:创建签名者实体,并将之设为“可信的”。
 
javakey -c Kompass true
 
第三步:将许可证倒入数据库。
 
javakey -ic Kompass Kompass.key
 
最后一步:运行JAVA程序。
 
appletviewer signMyApp.html
 
我们注意到这里的“.html
不是上面给出的“MyApp.html”。其实这二者
的差别很小,“signMyApp.html
只是多了一个参数:
 
archive="signMyApp.jar"
 
它告诉浏览器所有有用的文件
(这里的 MyApp.class)均在存档文件中而不
在其它地方。
 
 
... ...
 
 

(转载)