`
kakarot_java
  • 浏览: 161518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

applet 权限 数字签名

阅读更多
    最近在维护一个applet的项目,其中用到了socket通信来实现聊天的功能,不过由于权限的问题,不能运行成功,需要更改本地的jre的java.policy文件,赋予权限才行,如果让用户手动去修改该文件是不现实的,于是从网上找了一个解决办法,就是做个数字签名,用户就可以不用手动去修改什么东西了,只要给你的jar包加上数字签名就Ok啦!!一下是添加数字签名的流程(转载的):


    最近在研究applet,打算使用applet来开发一个上传文件上传控件,之前因为一直觉得applet的沙箱控制导致applet不能主动的访问客户端的资源,所以也曾因此而放弃.不过最近在研究applet的签名后,有了点收获,可以通过签名jar文档来达到这样的控制策略,下面是我在实际实验过程中的一些心得和体会,跟大家一起分享下.(注:如果转载此文,请注明出处和作者,尊重作者的劳动成果,谢谢)

一、压缩你的class类文件为jar包
1.假设你的需要压缩的类文件存在的包为:cn.mbq.test1和cn.mbq.test2
2.进入你的classes目录,在DOS窗口中执行命令:jar cf mytest.jar cn.mbq.test1 cn.mbq.test2
3.执行命令后你会在当前目录中找到mytest.jar文件,这个就是刚才生成的档案文件。你可以修改它的后缀为rar,然后使用winrar压缩程序打开它查看看是否正确。


二、使用keytool工具生成密匙库
1.keytool工具位于${java_home}/bin目录下;
2.在DOS窗口中执行命令:keytool -genkey -keystore mytest.store -alias mbq
  注意:mytest.store 是你的密匙库的名称,可以随意修改,后缀请不要修改!
        mbq 为别名,这个也可以改成自己的名称
3.执行上述命令后,DOS窗口中会提示你输入keystore的密码、你的姓名、组织单位等等信息。这里要注意的是输入密码请记住,后面要用到的。在最后,我们输入y确认信息。然后再直接回车设置mbq的主密码和store密码一致即可!


三、使用keytool工具导出签名时用到的证书
1.在DOS窗口中执行命令:keytool -export -keystore mytest.store -alias mbq -file mbq.cert
  注意:mytest.store 就是第二步生成的密匙库名称
        mbq 也是在第二步中我们指定的别名
        mbq.cert 为我们生成的证书的名称,可以自己修改名称,注意后缀不要改
2.命令执行成功,我们会在当前目录下找到一个mbq.cert文件,这个就是我们刚才生成的证书。


四、使用jarsigner工具签名jar压缩文档
1.jarsigner工具位于${java_home}/bin目录下;
2.在当前DOS窗口中执行命令:jarsigner -keystore mytest.store mytest.jar mbq
  注意:mytest.store 就是我们在第二步中生成的密匙库名称
        mytest.jar 就是我们这第一步压缩的jar文档
        mbq 是提供者的名称,我们这里设置为我们的别名


五、创建mytest.policy文件
1.在当前目录下创建一个mytest.policy文件,其内容如下:
keystore"file:mytest.store","JKS";
grantsignedBy"mbq"
{
permission java.io.FilePermission"<<ALLFILES>>","read";
};
2.这个文件的意思就是说让所有由mbq签名的applet都可以对本地的所有文件进行读操作。


六、归档文件
    通过上述的五个操作后,我们会在当前目录中找到如下几个文件:mytest.jar-签名后的jar文档、mytest.store-密匙库、mbq.cert-证书、mytest.policy-访问策略文件。如果没有这些文件,那么你的applet数字签名过程就没有正确的完成,请检查上述的操作。以后,如果对打包的java文件做了修改,那么就需要重新签名一次才可以!


七、在网页中运行applet
1.假设你的applet中的主启动类为:cn.test.TestApplet.class;整个前面生成的档案文件、证书啊存储在目录:d:\test\myapplet下;
2.建立一applet_test.html文件存放在任何目录下都可以,然后内容如下:

Java代码
1 <HTML>...</HTML><HTML>   
2 <BODY>...</BODY><BODY>   
3 <APPLET CODEBASE="d:\test\myapplet" CODE="cn.test.TestApplet.class" ARCHIVE="mytest.jar" WIDTH=200 HEIGHT=100 name="myapp">   
4 </APPLET>   
5 </BODY>   
6 </HTML> 

1 <HTML>...</HTML><HTML>
2 <BODY>...</BODY><BODY>
3 <APPLET CODEBASE="d:\test\myapplet" CODE="cn.test.TestApplet.class" ARCHIVE="mytest.jar" WIDTH=200 HEIGHT=100 name="myapp">
4 </APPLET>
5 </BODY>
6 </HTML>

    注意:其中的CODEBASE就是你的类的基础目录,CODE也就是你的APPLET的启动主类,ARCHIVE也就是签名后的JAR文档。
2.然后在IE中打开该html文件,那么会看到IE提示你是否信任该插件,也就是说我们的证书起作用了,然后确定运行后,就可以在页面上看到applet的运行效果了。

    但是由于SUN和MS的问题,目前IE并不支持最新的JRE,而是使用MS自己开发的JRE,所以这个也是影响APPLET发展壮大的一个原因。而且正是由于这个原因,SUN的java-plugin技术才会出现。使用SUN的java-plugin技术我们就可以在applet中使用最新的JAVA类库了。由于IE在遇到APPLET标签的时候会调用自己的JRE,但是如果客户机器上安装的JRE不是我们想要的版本,那么就会出错了。所谓java-plugin技术就是利用IE的插件机制来制定我们想要的JRE,我们可以在IE中使用OBJECT标签来调用APPLET,这样就不会引用MS的JRE了,从而达到我们想要的效果,而且java-plugin技术不仅仅支持IE,还支持Navigator等浏览器。不过我们需要编写比较复杂的HTML代码了,但是这一且SUN已经帮我们做到了,呵呵,在JDK1.4或更高的版本中SUN提供了一个HtmlConverter.exe工具来帮助将包含applet标签的html转换成包含OBJECT和EMBED标签的html代码,该工具位于${java_home}/bin目录下,对于1.4以前的版本该工具则是单独提供的,不过现在几乎都是1.4或1.5甚至更高版本的JDK了吧,呵呵。

    该工具很简单,是图形化的工具,我们直接运行即可。比如我将上面的包含applet的html转换后(比如我选择只支持IE的),其代码变成了如下:

Java代码
01 <HTML>...</HTML><HTML>   
02 <BODY>...</BODY><BODY>   
03 <!--"CONVERTED_APPLET"-->   
04 <!-- HTML CONVERTER -->   
05 <object   
06     classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"   
07     codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=5,0,0,3"   
08     WIDTH = 200 HEIGHT = 100 NAME = "myapp" >   
09     <PARAM NAME = CODE VALUE = "cn.test.TestApplet.class" >   
10     <PARAM NAME = CODEBASE VALUE = "d:\test\myapplet" >   
11     <PARAM NAME = ARCHIVE VALUE = "mytest.jar" >   
12     <PARAM NAME = NAME VALUE = "myapp" >   
13     <param name = "type" value = "application/x-java-applet;version=1.5">   
14     <param name = "scriptable" value = "false">   
15 </object>   
16 <!--   
17 <APPLET CODEBASE="d:\test\myapplet" CODE="cn.test.TestApplet.class" ARCHIVE="mytest.jar"   
18 WIDTH=200 HEIGHT=100 name="myapp">   
19 </APPLET>   
20 -->   
21 <!--"END_CONVERTED_APPLET"-->   
22 </BODY>   
23 </HTML> 

01 <HTML>...</HTML><HTML>
02 <BODY>...</BODY><BODY>
03 <!--"CONVERTED_APPLET"-->
04 <!-- HTML CONVERTER -->
05 <object
06     classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
07     codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=5,0,0,3"
08     WIDTH = 200 HEIGHT = 100 NAME = "myapp" >
09     <PARAM NAME = CODE VALUE = "cn.test.TestApplet.class" >
10     <PARAM NAME = CODEBASE VALUE = "d:\test\myapplet" >
11     <PARAM NAME = ARCHIVE VALUE = "mytest.jar" >
12     <PARAM NAME = NAME VALUE = "myapp" >
13     <param name = "type" value = "application/x-java-applet;version=1.5">
14     <param name = "scriptable" value = "false">
15 </object>
16 <!--
17 <APPLET CODEBASE="d:\test\myapplet" CODE="cn.test.TestApplet.class" ARCHIVE="mytest.jar"
18 WIDTH=200 HEIGHT=100 name="myapp">
19 </APPLET>
20 -->
21 <!--"END_CONVERTED_APPLET"-->
22 </BODY>
23 </HTML>

    注意其中的OBJECT标签,可以看到APPLET标签已经被注释掉了。其中PARAM NAME=NAME这一行中的myapp就是我们applet应用程序的名称,在IE提示的确认运行中显示的就是这个名称了,我们可以改为自己的公司或组织的名称。然后提示的提供者也就是我们在签名时用到的名称了。

    另外,还要特别注意的就是这个包含OBJECT标签的html页面必须和你的mytest.jar压缩文档放在同一个目录下,这样才可以正确的加载,否则会一直报ClassNotFound的异常的,即使我们在OBJECT标签中指定了CODEBASE也不行,这个是我在测试的时候遇到的问题!


八、在Internet上应用签名的applet
    如果要把applet部署在网络上,那么最好是采用OBJECT标签的形式,同时也要兼顾采用EMBED标签来支持诸如FF等浏览器。我们把已签名了的mytest.jar和我们的网页放在同一个目录下,至于其他的如mytest.store和mbq.cert可以不用放在一起,至少我在测试的过程中没有放到一起也不会出错,而且在不同的机器上运行的也非常好,可以读取客户端机器的资源!另外,也发现mytest.policy其实也没什么用处,因为这是参考网络上的,而且他们的版本都是1.3左右,所以估计是版本低的缘故吧!


    到此,我们就已经完成了applet的签名到部署,以及到实际的网络应用中了。这样我们使用applet来开发控件时就不会因为无法读取客户端资源而放弃了,呵呵~~
分享到:
评论
2 楼 jj229937432 2010-09-08  
狂顶,狂顶啊
1 楼 xdwlk2004 2010-05-18  
很好用

相关推荐

    applet提升权限demo

    一个appelt提升权限的demo. 设计到数字签名,创建policy文件,提升权限等问题。

    Java安全性编程实例(徐迎晓)

    还介绍了定义自己的权限以及签名Java Applet。 # 第九章 # 解决的主要问题——身份验证和基于执行者身份的程序的安全运行 # 程序需要用户输入账号和口令到数据库登录,但以后可能需要改为智能卡验证。 # 程序...

    java编程100例

    实例87 数字签名 实例88 数字证书 实例89SSL及HTTPS协议 实例90 Screen小程序 实例91 文字跑马灯与信息窗口 实例92 手机日历 实例93 手机画册 实例94Canvas绘图程序 实例95 碰撞的小球 实例96 用RMS记录个人信息 ...

    java源码包---java 源码 大量 实例

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包2

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包3

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包4

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,系统相关,数字签名,数字证书 Java 数字签名、数字证书的相关实例。 关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,系统相关,数字签名,数字证书 Java 数字签名、数字证书的相关实例。 关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用...

    JAVA上百实例源码以及开源项目

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    Java源码包100个设计实例.zip

    Java 数字签名、数字证书生成源码.rar Java 版的酒店系统,貌似完整.rar Java 电梯模拟程序 v2.0.rar Java 组播组中发送和接受数据实例 Java 飞机订票.rar Java 高考信息管理系统 SQL数据库.rar Java (Jsp)制作...

    JAVA上百实例源码以及开源项目源代码

    Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,系统相关,数字签名,数字证书 Java 数字签名、数字证书的相关实例。 关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用...

    基于J2EE的在线考试系统构建探讨

    在客户层,在浏览器中applet的textarea区域显示word题的要求,并利用applett数字签名技术,突破访问本地文件系统的限制,打开word做题。 在Web层,利用servlet的文件上传下载技术,将读出的word文件下载到本地磁盘...

    h_JAVA 2应用编程150例.rar

    实例91 数字签名 303 实例92 实现SSL协议 306 实例93 简单的HTTPS服务 314 第9章 Java Web Service编程 319 实例94 使用DOM的层次模型 320 实例95 使用SAX事件模型 324 实例96 JAXP编程 327 实例97 JDOM编程 331 ...

    java应用软件程序设计

    288 第8章 Java安全控制编程 291 实例87 控制访问权限 292 实例88 产生密钥 296 实例89 单钥加解密 299 实例90 双钥加解密 301 实例91 数字签名 303 实例92 实现SSL协议 306 实例93 简单的...

Global site tag (gtag.js) - Google Analytics