`
kakarot_java
  • 浏览: 161962 次
  • 性别: 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签名的方法

    签名是软件发布者证明自己身份的一种方式,通过数字签名技术确保代码未被篡改,并且可以让用户确认代码来源。在Java中,对Applet签名意味着使用私钥对Applet的字节码进行加密,然后使用对应的公钥验证。这使得用户...

    applet下载操作及权限问题

    - **签名与权限请求**:如果Applet需要进行文件操作,必须先进行数字签名,然后在代码中使用`java.security.SecurityPermission`请求相应的权限。用户在弹出的安全警告对话框中确认后,Applet才能执行相应操作。 4...

    applet提升权限demo

    1. **数字签名**:数字签名是确保代码完整性和来源可信的一种方法。使用Java的`jarsigner`工具,我们可以对包含Applet的JAR文件进行签名。签名过程会使用开发者私钥对JAR文件的每个条目计算哈希值,并将结果用私钥...

    利用数字签名超越Java Applet的安全限制.doc

    总结来说,要超越Java Applet的安全限制,开发者可以为Applet的代码进行数字签名,然后配置Policy文件,赋予Applet特定的权限,如访问本地文件系统或特定网络资源。这种方式使得Applet可以在用户同意的情况下执行更...

    java Applet技术文档

    - 数字签名:为了突破安全限制,开发者可以对Applet进行数字签名,以增加信任度。 7. **Applet的替代技术** - JavaFX:Oracle推荐的现代Java GUI开发框架,提供更丰富的图形和媒体功能,支持桌面和Web应用程序。 ...

    java applet运行出现异常

    3. **代码签名问题**:为了安全,Java Applet通常需要进行数字签名,以证明其来源和防止恶意代码。未签名或签名验证失败的Applet可能会被浏览器拒绝运行。 4. **权限问题**:由于安全限制,Applet运行在沙箱环境中...

    Start Applet Demo

    6. **签名和数字证书**:为了超越基本的安全限制,Applet可以被签名,这需要一个数字证书。签名的Applet可以获得更多的权限,如访问本地文件系统或网络资源。 7. **浏览器支持**:Applet的运行需要Java插件,而现代...

    applet教程

    - 签名的Applet可以通过数字签名来获得更多的权限,但这也增加了安全风险。 6. **替代技术** - 由于Applet的局限性,现代Web开发更倾向于使用JavaScript、HTML5 Canvas、WebGL等技术进行交互式内容的开发。 - ...

    孙强上传的applet的保存文件

    签名的过程是为Applet添加数字签名,证明其来源可信赖。这样,用户在首次运行时会被提示是否信任该Applet,一旦用户选择信任,Applet就能获得相应的权限。 6. **Alternative技术**:随着Applet的衰落,现代Web开发...

    jbuilder2005开发applet游戏接触

    8. **数字签名**:为Applet进行数字签名,使用证书确保代码完整性和来源可信,以便浏览器放宽对Applet的权限限制。 9. **JRE插件制作**:如果客户端的JRE版本不符合要求,可以使用JDK工具HtmlConverter.exe将HTML...

    数字签名的制作方法整理-10页word资料.pdf

    在Java开发中,数字签名主要用于确保JAR文件的可信度,尤其是在通过Java网络加载协议(JNLP)运行Applet或Web Start应用时。这些程序可能需要访问用户的系统资源,因此,只有经过签名的JAR文件才能获取用户的信任,并...

    数字签名的制作方法整理-10页word资料.docx

    Java的网络加载协议(JNLP)和Applet通常需要签名的JAR文件,因为它们可能请求系统的高级权限,如访问文件系统。未签名的JAR文件在运行时会引发安全警告,要求用户确认是否信任来源。签名的JAR文件可以提供一个可靠...

    Applet

    2. **签名Applet**:为了突破沙箱限制,开发者可以对Applet进行数字签名,让用户在了解风险后自行决定是否授予额外权限。 ### 六、实践应用 尽管Applet的使用已经减少,但在特定领域如科学计算、教育软件、在线...

    用applet实现自动从服务器上下载文件

    签署Applet是一个额外的过程,涉及到数字签名和证书。 5. **编码实现**:具体实现时,可以使用BufferedInputStream和BufferedOutputStream来提高读写效率,同时处理可能出现的异常。在Applet的`init()`或`start()`...

    Applet嵌入网页实现读取用户目录内的文件和文件名

    - 为了绕过这些安全限制,开发者可以对Applet进行签名,这涉及到使用数字证书验证Applet的身份。签名后的Applet可以获得用户的信任,允许执行额外的权限,如读取本地文件。在上述描述中,signed applet被用来读取...

    Java中Applet简介.pdf

    - 通过数字签名,Applet可以获得更多的权限,例如读写本地文件,但这需要用户明确的许可。 **Applet图形的显示和刷新**: - `paint()`方法用于实际的绘图操作,当需要在Applet上绘制内容时调用。 - `repaint()`方法...

    java JAR包签名

    签名过程包括对JAR中的每个文件进行哈希计算,然后将这些哈希值与发布者的数字签名一起存储在JAR的元数据中。这样,当JAR被加载时,Java运行环境会检查这个签名,以确认文件未被篡改,并验证发布者的身份。 JAR包...

    SWING实现的上传控件,嵌入APPLET实现

    开发者需要确保APPLET有适当的权限设置,并且使用数字签名以增加用户信任度。 7. **错误处理与反馈**:提供合适的错误处理机制,比如在上传失败时向用户显示错误信息,并考虑如何在Swing界面更新上传进度和状态。 ...

    java安全通信数字证书

    例如,使用jarsigner工具给Applet签名,可以突破Applet的权限限制: ```bash jarsigner -keystore myKeystore -storepass myPassword myApplet.jar myAlias ``` 这使得Applet能够访问敏感资源,如本地文件系统。 ...

    Java安全通信、数字证书及应用实践

    4. **数字签名**:数字签名是应用非对称加密技术对数据进行的一种签名形式,它结合了消息摘要和发送者的私钥。接收者可以使用发送者的公钥验证签名,确保数据未被篡改且来自可信源。Java的`Signature`类用于执行数字...

Global site tag (gtag.js) - Google Analytics