java applet 签名问题

 用eclipse 开发了一个applet 应用,部署到网页上面,运行时,总出现一个错误:

Error:access denied ("java.net.SocketPermission" "192.168.0.50:5500" "connect,resolve")

其实出现这个错误的一个重要原因是,applet没有签名。因此不能访问本地资源,包括socket,涉及I/O的一些操作。

解决方法如下:

一、用ECLIPSE 将 applet  打成JAR 包
二、使用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文件存放在任何目录下都可以,然后内容如下:

[code] 
<HTML>
 <BODY>
 <APPLET CODE="cn.test.TestApplet.class" ARCHIVE="mytest.jar" WIDTH=200 HEIGHT=100 name="myapp">   
</APPLET>   
 </BODY>

</HTML>   

[/code]

现在再运行这个 applet 就发现可以访问本地资源了,如果细心点再用 winrar 打开  jar 包,你会发现在META-INF文件夹下增加了不少东西。

 

 



除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: applet 签名
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.