正文

Applet数字签名实现方法2005-07-29 22:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xueyb/3309.html

分享到:

Applet访问本地系统,很是容易实现。


a)    测试时,使用policytool工具,打开IE使用的jre的策略文件,增加相应的权限即可。对于sun的jre,位置在:C:\Program Files\Java\j2re1.4.2_04\lib\security\java.policy。微软的jre位置及配置不详。

b)    发布时,最好是使用签名。首先生成密钥,可以使用JDK1.4自带的密钥工具。
    i.    keystore文件存储签名者的公钥/私钥对,这个文件用来存储已命名的、受密码保护的密钥。
    ii.    keytool工具:用来生成新的密钥对,将这个密钥对和一个名称(或别名)相关联,并用密码将他们保护起来。这个别名在每个keystore文件中都是独立的,它用于在一个特定的keystore文件中识别一个特定的密钥队。要访问或修改包含在keystroe文件中的密钥对信息,必须要有这个密钥对的密码。
    iii.    keytool -genkey  -alias friend -keypass friend4life -validity 1000 -keystore ijvmkeys
    -validity 1000 这个密钥对的有效天数1000天,相当于27年多。
    此命令,为别名friend产生密码为friend4life的密钥对,存储在ijvmkeys的keystore文件中。
    当第一次存储到ijvmkeys时,需输入一个keystore密码,在对这个keystore文件进行任意访问和修改时都需要这个密码(-storepass)。

c)    签名jar文件
    i.    jarsigner -keystore ijvmkeys -storepass ijvm2ed -keypass friend4life browser.jar friend
    用friend的私钥对包含在browser.jar文件中的class文件进行签名。
    ii.    注意:在现实世界中,必须确保不要让那些意图不轨的人得到你的私钥,并要和他们保持距离。这意味着你不能丢失这个keystore文件,必须记住密码,等等。还必须让那些试图用你的签名来让你的代码访问他们的系统的人得到你的公钥。

d)    将自签名证书从keystore中输出到文件,这个cer文件就是要拷贝到客户端的唯一文件 。
    i.    keytool -export -keystore ijvmkeys -alias friend -file friend.cer
    ii.    而对于签名applet的接受方Susan,需要通过如下步骤来安全地执行Friend编写的签名applet:
    //得到Friend的证书并将之读入到密钥库中susanstore中
    keytool -import -alias friend -file friend.cer -keystore susanstore
    iii.    如果没有自己的keystore文件,可以将公共钥匙倒入到jre的cacerts(这是jre的默认keystore)。

e)    设置接受方的策略文件。
    i.    运行policytool产生满足Susan要求的policy文件
        policytool
    ii.    在edit菜单中选择Change keystore ,在对话框中new keystore url:中输入 :file:/c:/program files /javasoft/jre/1.3.0_01/lib/security/cacerts,在new keystore type 中输入JKS,这是cacerts的固定格式。接受方自己的keystore可以不输入type。
    iii.    在CodeBase中输入: http://URL:7001/* 其中的URL是服务器的IP地址,7001是端口。 也可以不输,表示所有。
    iv.    在SignedBy中输入(别名alias):这儿是friend

f)    注:以上的例子为简单起见,使用了keytool产生的自签名证书.其实,用户也可以使用keytool -certreq向商业CA中心申请电子证书。

g)    调用applet的html文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
HTML Test Page
</title>
</head>
<body>
<applet
  codebase = "."
  code     = "image.Applet1.class"
  archive  = "friend.jar"
  name     = "TestApplet"
  width    = "800"
  height   = "600"
  hspace   = "0"
  vspace   = "0"
  align    = "middle"
>
</applet>
</body>
</html>

由于java2的安全性,对applet的正常调用的html文件有人说不能再使用了,而改为ActiveX类型的调用。具体的又分ie和nescape的不同写法,这一些在sun网上都能找到现成的教程。我不确定,但可以这样写:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
HTML Test Page
</title>
</head>
<body>
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="900" height="520" align="baseline" codebase="http://192.168.2.217:7001/j2re-1_3_0_01-win-i.exe#Version=1,3,0,0">
<PARAM NAME="java_code" VALUE=" image.Applet1.class">
<PARAM NAME="java_codebase" VALUE= ".">  
<PARAM NAME="java_type" VALUE="application/x-java-applet;version=1.3">
<PARAM NAME="ARCHIVE" VALUE=" friend.jar" >
<PARAM NAME="scriptable" VALUE="true">
</OBJECT>  
</body>
</html>

阅读(5482) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册