| | JBuilder 2005开发Applet游戏全接触 |
| | | | | | [文章信息] | | | 作者: | 陈雄华 | | 时间: | 2005-02-22 | | 出处: | 天极网 | | 责任编辑: | 方舟 | |
| [文章导读] | | | 本文拟通过一个耳熟能详的指法练习游戏讲解如何在JBuilder 2005下开发Applet应用程序 | |
| |
|
| | | |
|
|
|
|
|
打包并进行数字签名
浏览器对Applet的数字签名支持并没有一个统一的标准,但是一些著名的浏览器如IE和Navigator对进行数字签名的Applet都可以开放大部分的权限。要对Applet进行数据签名必须先将Applet类和资源打成一个JAR包。
JBuilder提供一个Applet的打包向导,在向导的最后一步可以指定一个数据证书对最终生成的JAR包进行签名。所以在这一节里,我们先介绍数字签名的技术,而后再讲解如何使用JBuilder的Applet打包向导。
1、数字签名技术
数字签名涉及到以下几个基本的概念:
·消息摘要
消息摘要是对原始数据按照一定算法进行计算得到的结果,它主要检测原始数据是否被修改过。消息摘要与加密不同,加密是对原始数据进行变换,可以从变换后的数据中获得原始数据,而消息摘要是从原始数据中获得一部分信息,它比原始数据少得多,因此消息摘要可以看作是原始数据的指纹。
·消息验证码
当甲和乙通信时,甲将数据传给乙时,同时也将数据的消息摘要传给乙,乙收到后可以用该消息摘要验证甲传的消息是否正确。这时会产生问题,即若传递过程中别人修改了数据时,同时也修改了消息摘要。乙就无法确认数据是否正确。消息验证码可以解决这一问题。 使用消息验证码的前提是 甲和乙双方有一个共同的密钥,这样甲可以将数据计算出来的消息摘要加密后发给乙,以防止消息摘要被改。由于使用了共同的密钥,所以称为"验证码"。
·数字签名
使用消息摘要和消息验证码两种技术可以保证数据没有经过改变,但接收者还无法确定数据是否确实是某个人发来的。尽管消息码可以确定数据是某个有同样密钥的人发来的,但这要求双方具有共享的密钥,若有一组用户共享,我们就无法确定数据的来源了。
数字签名即是被设计用来解决这个问题的技术。数字签名利用非对称加密技术,发送者使用私钥加密数据产生的消息摘要(签名),接收者使用发送者的公钥解密消息摘要以验证签名是否是某个人的。由于私钥只有加密者才有,因此如果接收者用某个公钥解密了某个消息摘要,就可以确定这段消息摘要必然是对应的私钥持有者发来的。
·数字证书
使用数字签名的前提是接收数据者能够确信验证签名时(用发送者的私钥加密消息摘要)所用的公钥确实是发送者本人的,这需要通过数字证书来解决这个问题。
数字证书含有两部分数据:一部分是对应发送者(组织或个人)的信息,另一部分是这个发送者所对应的公钥。即数字证书保存了发送者和其公钥一一对应的关系。同样,数字证书也有可能被假造,有效的数字证书必须经过权威 CA的签名,即权威CA验证数字证书的内容的真实性,然后再在数字证书上使用权威CA自己的私钥签名,相当于在发送者的证书上盖章。
其实数字签名技术是现实生活在计算机领域的反映,我们不妨通过一个小故事将这此技术反向映射到生活中。
《永不消失的电波》是60年代一部著名的电影,讲述了1938年我党地下组织在国统区上海的电台被敌人破坏了,延安解放区我军电台政委李侠奉命前往的上海,加强秘密电台的工作,为了保证上海地下党组织能够正确接洽到真实的李侠而不被敌人蒙骗,我们不妨来设定这样的一个情节,李侠身上带一封介绍其身份的介绍信,这相当于消息摘要,还约定了接头暗号:地下党接头中说"山上杜鹃红艳艳",李侠则要接"山下溪水细潺潺",那么这个暗号就是"消息验证码"。而在李侠的介绍信上有延安电台台长的签名,这个就是"数字签名",签名之上还加盖了一个延安电台的公章,这个就是数字证书。还有一份证名电台公章的文件那就是CA证书了。当然实际情况可能只需要一个暗号,太多东西反而会在行动中暴露身份,但在计算机领域这些东西都是必要的。
2、数字证书的生成
在JBuilder的Applet打包向导中仅需要一个数字证书,向导会为最终的JAR包生成消息摘要、消息验证码并签名。通过JDK自带的Keytool工具可以为生成一个数据证书,这个工具位于JDK的bin目录下。
打开DOS命名窗口,定位到JBuilder 2005下自带的JDK的bin目录下,执行下面的Keytool命名生成一张自己的证书:
C:\Borland\JBuilder2005\jdk1.4\bin>keytool -genkey -alias chenxhCA -keyalg RSA -keystore superCALib -validity 3650
命令窗口将要求你输入一些个人信息如下图所示:
 图 15 生成数字证书的命令窗口 | 这里我们使用keytool工具生成了一个名为chenxhCA的证书,它存放到superCALib证书库中,有效期为10年,使用的加密算法上RSA。证书库superCALib的访问密码是123456,而chenxhCA证书条目的访问密码是123123。在输入作为发送者身份标识的信息后就会在当前目标,即C:\Borland\JBuilder2005\jdk1.4\bin下生成一个名为superCALib的证书库文件。
keytool参数较多,使用也比较复杂,详细使用说明,请参见Sun网站的帮助文档:
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html。
一般情况下你还需要将该证书发给权威的CA签名,这个证书才会被视为合法的证书,当然你也可以模拟创建一个CA证书,用这个CA证书为我们将用于签发Applet的chenxhCA证书签名,为了简单起见我们忽略这一步。
3、打包
现在已经万事俱备了,我们可以开始利用JBuilder的打包向导将Applet所以文件打包并签名的过程。
1) File->New...->Archive,在Archive页中双击Applet JAR图标启动Applet打包向导。
2) 在向导第1步中指定Applet JAR的名字和保存到目标文件,如下图所示:
 图 16 指定文件名 | 为了加速网络下载速度,我们勾选上Compress the contents of the archive选项,压缩JAR文件,减小文件的体积。Always create archive when building the project选项使用每次编辑工程时都重新创建Applet JAR包。点击Next到下一步。
3) 在这一步里,指定JAR文件中所需包含的资源文件。
由于TypeTrainApplet程序引用了3张图片,所以JAR文件除包含TypeTrainApplet.class程序文件外,还需要将用于按钮图标的文件选择进来,如下图所示:
 图 17 指定JAR的内容 | 按Next到下一步。
注意:
当你指定game.TypeTrainApplet.class,start.gif,pause.gif,stop.gif,hit.wav时,打成的Applet JAR包将不能正确运行,那些和TypeTrainApplet类位于同一程序文件的事件监听器类将被排除在外,所以需要通过game/*.*来打包。
4) 由于向导第3~6步,我们不需要作特别的设置,所以一直按Next到第7步。
在这一步里,我们用上一小节中生成的数字证书签名Applet的目标JAR文件,如下图所示:
 图 18 指定如何对JAR进行签名 | ·Digitally sign this archive选项在默认的情况下是未选中的,首先勾选该选项
·点击Keystore后的…按钮,选择我们刚才在C:\Borland\JBuilder2005\jdk1.4\bin目录下所生成的superCALib证书库文件。
·在Keystore password中输入123456,即证书库的密码。
·点击Alias后的…按钮,由于我们在superCALib证书库中仅有一个chenxhca证书,所以在弹出的Select Alias对话框的Available Alias列表中仅有一个chenxhca选项,选择chenxhca证书。
·在Alias password中输入123123,即chenxhca证书的私钥密码。
·在Store type中输入JKS,由于Keytool工具的默认证书库类型是JKS,所以superCALib的类型为JKS。
在设置完以后的信息后,按Finish结束向导,在工程窗格的资源树中将出现一个TypeTrainJAR的节点。右击这个节点,在弹出的菜单中选择Rebuild,JBuilder将创建Applet的JAR包,并用chenxhca证书签名。
Rebuild完成后,工程窗格的TypeTrainJAR节点就可以展开了,展开这个节点,我们发现目标JAR文件中除了资源文件以外,在META-INF文件夹下还有3个文件,如下图所示:
 图 19 目标JAR中关于签名的文件 | META-INF文件夹下的3个文件是和数字签名有关的文件,说明如下:
·MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据。
·CHENXHCA.SF:这是 JAR 文件的签名文件,文件名标识了签名者。
·CHENXHCA.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名 JAR 文件的公共签名。
4、在文件中引用Applet包文件
我们现在来更改TypeTrainApplet.html中<applet>的属性使其通过JAR来引用Applet程序。这个过程很简要,打开TypeTrainApplet.html文件,切换到Source视图页中,将光标定位在<applet>标签中。窗口右边出现<applet>标签的属性输入编辑器,在archive中输入game.JAR,按回车。
 图 20 更改网页的<applet>标签属性 | JBuilder为<applet>标签添加archive的属性。由于game.JAR文件位于工程根目录下,而TypeTrainApplet.html文件位于工程目录的classes子文件夹下,所以需要将TypeTrainApplet.html拷贝到工程根目录下,这样archiver="game.JAR"的属性声明才是正确的,因为在寻找程序资源时,是以TypeTrainApplet.html所在目录为相对路径的。
保存后,到工程目录下双击TypeTrainApplet.html文件,IE检测到网页中包含了经过签名的Applet程序,弹出一个安全警告的对话框,如下图所示:
 图 21 IE在运行签名的Applet前的安全警告 | 由于我们的证书没有经过权威机构的签名认证,所以对话框提示"此安全证书是由不可信的公司签发的"信息。需要指出的是游览器的JRE版本不同,弹出的警告对话框并不相同,上图是JRE版本为1.5.0时的警告对话框。
可以通过点击"更多详细信息"按钮查看证书的信息,如下图所示:
 图 22 签名证书的信息 | 点选"签发人"项,将可以看到证书执有者的个人信息。关闭这个对话框,回到"警告-安全"对话框中,点击"是"接受这个签名的Applet。IE就对这个Applet开放了安全权限,不再受沙盒模型的限制了。
试着启动游戏,玩一伙儿后,点击"保存"按钮,Applet将正确地将统计数据保存到D:\result.txt文件中。
|
|
|
|
|
|
|
|