免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1691 | 回复: 0
打印 上一主题 下一主题

java applet数字签名 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-28 22:04 |只看该作者 |倒序浏览

                    浏览器对Applet的数字签名支持并没有一个统一的标准,但是一些著名的浏览器如IE和Navigator、firefox对进行数字签名的Applet都可以开放大部分的权限。要对Applet进行数据签名必须先将Applet类和资源打成一个JAR包。(如:通过applet实现web报表打印时就要对applet进行数字签名,否则不能调用打印机打印报表)
1、数字签名技术
  数字签名涉及到以下几个基本的概念:
·消息摘要
 
 消息摘要是对原始数据按照一定算法进行计算得到的结果,它主要检测原始数据是否被修改过。消息摘要与加密不同,加密是对原始数据进行变换,可以从变换后
的数据中获得原始数据,而消息摘要是从原始数据中获得一部分信息,它比原始数据少得多,因此消息摘要可以看作是原始数据的指纹。
·消息验证码
 
 当甲和乙通信时,甲将数据传给乙时,同时也将数据的消息摘要传给乙,乙收到后可以用该消息摘要验证甲传的消息是否正确。这时会产生问题,即若传递过程中
别人修改了数据时,同时也修改了消息摘要。乙就无法确认数据是否正确。消息验证码可以解决这一问题。 使用消息验证码的前提是
甲和乙双方有一个共同的密钥,这样甲可以将数据计算出来的消息摘要加密后发给乙,以防止消息摘要被改。由于使用了共同的密钥,所以称为"验证码"。
·数字签名
  使用消息摘要和消息验证码两种技术可以保证数据没有经过改变,但接收者还无法确定数据是否确实是某个人发来的。尽管消息码可以确定数据是某个有同样密钥的人发来的,但这要求双方具有共享的密钥,若有一组用户共享,我们就无法确定数据的来源了。
 
 数字签名即是被设计用来解决这个问题的技术。数字签名利用非对称加密技术,发送者使用私钥加密数据产生的消息摘要(签名),接收者使用发送者的公钥解密
消息摘要以验证签名是否是某个人的。由于私钥只有加密者才有,因此如果接收者用某个公钥解密了某个消息摘要,就可以确定这段消息摘要必然是对应的私钥持有
者发来的。
·数字证书
  使用数字签名的前提是接收数据者能够确信验证签名时(用发送者的私钥加密消息摘要)所用的公钥确实是发送者本人的,这需要通过数字证书来解决这个问题。

 
 数字证书含有两部分数据:一部分是对应发送者(组织或个人)的信息,另一部分是这个发送者所对应的公钥。即数字证书保存了发送者和其公钥一一对应的关
系。同样,数字证书也有可能被假造,有效的数字证书必须经过权威
CA的签名,即权威CA验证数字证书的内容的真实性,然后再在数字证书上使用权威CA自己的私钥签名,相当于在发送者的证书上盖章。
  其实数字签名技术是现实生活在计算机领域的反映,我们不妨通过一个小故事将这此技术反向映射到生活中。
 
 《永不消失的电波》是60年代一部著名的电影,讲述了1938年我党地下组织在国统区上海的电台被敌人破坏了,延安解放区我军电台政委李侠奉命前往的上
海,加强秘密电台的工作,为了保证上海地下党组织能够正确接洽到真实的李侠而不被敌人蒙骗,我们不妨来设定这样的一个情节,李侠身上带一封介绍其身份的介
绍信,这相当于消息摘要,还约定了接头暗号:地下党接头中说"山上杜鹃红艳艳",李侠则要接"山下溪水细潺潺",那么这个暗号就是"消息验证码"。而在李
侠的介绍信上有延安电台台长的签名,这个就是"数字签名",签名之上还加盖了一个延安电台的公章,这个就是数字证书。还有一份证名电台公章的文件那就是
CA证书了。当然实际情况可能只需要一个暗号,太多东西反而会在行动中暴露身份,但在计算机领域这些东西都是必要的。
2、数字证书的生成
  通过JDK自带的Keytool工具可以为生成一个数据证书,这个工具位于JDK的bin目录下。
   打开linux的terminal窗口,执行下面的Keytool命名生成一张自己的证书:

这里我们使用keytool工具生成了一个名为testCA的证书,它存放到testCALib证书库中,有
效期为10年,使用的加密算法上RSA。证书库testCALib的访问密码是123456,而testCA证书条目的访问密码是123456。
  keytool参数较多,使用也比较复杂,详细使用说明,请参见Sun网站的帮助文档:
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html。
  一般情况下你还需要将该证书发给权威的CA签名,这个证书才会被视为合法的证书,当然你也可以模拟创建一个CA证书,用这个CA证书为我们将用于签发Applet的chenxhCA证书签名,为了简单起见我们忽略这一步。
3、打包
  现在已经万事俱备了,我们可以开始利用可以值用一些开发工具的打包向导将Applet所以文件打包并签名的过程。
    下面以jar命令为例来打包
进入你开发的类的文件夹,输入如下命令:
jar cvf test.jar *.class
此命令生成一个名为test.jar的包
4.使用刚才keytool生成的钥匙来对jar文件进行签名
  命令如下:
jarsigner -keystore testCALib test.jar testCA
输入密钥库的口令短语: 123456(刚才生成证书的口令)
  这样就对test.jar进行了数字签名。
5、在文件中引用Applet包文件
   文件中如何引用applet包就略了,很简单,请参考applet的开发。
6、[color="#990000"]使用插件下载JRE
 
 如果客户端游览器还未安装JRE或已安装的JRE版本低于你Applet的要求,或浏览器自带的JRE不是Sun公司标准的Applet,你
Applet都可能无法正常运行。可以通过JDK自带的HtmlConverter工具对带Applet的HTML文件进行转换,转换后的文件可
以指定浏览器在运行Applet时将特定版本的JRE以插件的方式下载并安装,就象带Flash插件或SVG插件一样。
  进入你引用applet程序的文件目录,假若你引用applet的文件名为test.htm,在linux终端输入如下命令:
HtmlConverter test.htm
这样,原始的test.htm被备份到当前文件夹下,在原位置的test.htm已经被转换的结果覆盖,此时的test.htm文件打开时就会自动检查你的JRE版本并视情况自动安装JRE。
    查看转换后的htm文件,将其中jinstall-1_5_0-windows-i586.cab类似的文件(视你自己的jdk版本定)下载并放置到自己的Web服务器中,相应更改
<object>的codebase属性值,此时并不会成功自动安装JRE1.5.0,因为jinstall-1_5_0-windows-i586.cab
并未包含JRE1.5.0的安装程序,而是通过cab文件中的jinstall-1_5_0.inf文件声明根据http:
//java.sun.com/update/1.5.0/1.5.0-b64.xml的配置信息,从Sun网站下载后安装。如果你Web服务器所在的局
域网不能直接访问Sun网站,安装过程将无法安成。你需要更改cab文件中的jinstall-1_5_0.inf文件,下载并更改1.5.0-
b64.xml配置文件才可以使局域网的客户端到你自己的Web服务器指定地址下载。
7、总结
大千世界,纷繁复杂,客户端浏览器的JRE版本和厂家百家争鸣,百花齐放,为了使我们的Applet能够在Sun标
准的JRE1.5.0的版本上运行,我们动用了JDK自带的转换器对原html进行转换,这样标准的JER1.5.0将作为插件的形式下载并安装以支持这
个难伺候Applet。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17549/showart_222747.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP