Applet安全限制和签名Appletjar数字签名jdk数字签名.docx
- 文档编号:7672491
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:10
- 大小:210.43KB
Applet安全限制和签名Appletjar数字签名jdk数字签名.docx
《Applet安全限制和签名Appletjar数字签名jdk数字签名.docx》由会员分享,可在线阅读,更多相关《Applet安全限制和签名Appletjar数字签名jdk数字签名.docx(10页珍藏版)》请在冰豆网上搜索。
Applet安全限制和签名Appletjar数字签名jdk数字签名
Applet安全限制和签名Applet
Cmd进入(我是在c盘根目录下操作以下命令的,jar包用eclipse导出的,将导出的jar包放到c盘根目录下,然后执行以下指令,也就是jar签名,)
keytool-genkey-dname"cn=BeanSoftStudio,ou=JavaSoftware,o=BeanSoftStudio,c=China"-aliasbeansoft-keypassbeansoft-storepassbeansoft-validity365-keystore.\beansoft
keytool-list-keystore.\beansoft-storepassbeansoft
keytool-export-keystore.\beansoft-storepassbeansoft-filebeansoft.cer-aliasbeansoft
jarsigner-verbose-keystore.\beansoftapplets.jarbeansoft(jar签名,beansoft是密码,具体步骤可以看一下整篇文档)
java学习2009-03-0723:
41:
19阅读75评论1 字号:
大中小 订阅
Applet的安全限制
Java平台为了防范恶意程序的攻击,使用了安全管理器,安全管理器执行系统资源的访问控制。
许多浏览器为了保护本地主机,对Applet作了如下安全限制:
1)Applet不能运行任何本地可运作程序。
2)禁止加载本地库或方法。
Applet只能使用自身的代码或Applet浏览器提供的JavaAPI。
3)禁止读、写本地计算机的文件系统。
4)禁止向提供Applet之外的任何主机建立网络连接等等。
网络摘抄:
Applet安全限制和签名Applet
因为Applet在浏览器中运行,所以,并不是什么操作都能做,例如不能读写创建文件,不能任意连接网站等等,总之就是不可威胁用户电脑的信息安全。
下面我们来试试看,新建一个文件操作的Applet,代码清单如下:
applets.FileOperationApplet
packageapplets;
importjava.applet.Applet;
importjava.awt.Label;
importjava.io.*;
publicclassFileOperationAppletextendsApplet{
publicvoidstart(){
try{
FileWriterout=newFileWriter("c:
\\test.txt");
out.write("测试写入文件");
out.close();
add(newLabel("文件写入成功"));
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
add(newLabel("文件写入失败"));
}
}
}
。
首先我们用Eclipse来运行,当然没问题,因为模拟器为了调试方便,是运行所有的操作的,运行后,界面显示文件写入成功,并且在C盘根目录下可以找到文件test.txt,并看到文件内容。
随后我们创建HTML文件,打算在网页文件中运行它,文件代码清单如下:
FileOperationApplet.html
,接着用浏览器打开这个网页,可以看到如图18.6所示的出错界面和信息提示。
这个出错信息完整的内容是:
java.security.AccessControlException:
accessdenied(java.io.FilePermissionc:
\test.txtwrite)
atjava.security.AccessControlContext.checkPermission(UnknownSource)
atjava.security.AccessController.checkPermission(UnknownSource)
atjava.lang.SecurityManager.checkPermission(UnknownSource)
atjava.lang.SecurityManager.checkWrite(UnknownSource)
atjava.io.FileOutputStream.
atjava.io.FileOutputStream.
atjava.io.FileWriter.
atapplets.FileOperationApplet.start(FileOperationApplet.java:
10)
atsun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(UnknownSource)
atjava.lang.Thread.run(UnknownSource)
,即:
访问拒绝,不能写入文件c:
\test.txt。
这很安全,不是吗?
图18.6Applet安全限制错误
然而实话实说,Applet在企业内部网上,还是很有用处的,它一般可以用来做一些复杂的操作,或者是大文件的上传下载,即时消息支持等等,笔者见过不少这样的解决方案(网络上也有人制作了Applet批量文件上传的功能)。
不过,这样的限制,虽然是安全了,但是却让Applet的功能大打折扣,那么有没有办法绕过这层安全限制呢?
答案是肯定的,这就是Java中推出的签名JAR功能,可以帮助我们在用户同意的情况下,绕过安全限制(当然在内部网没有问题,如果是外网,很容易发生恶意代码,例如恶意删除文件等等)。
注意:
由于Microsoft也推出了一款JVM,导致了Java标准的分裂,微软格式的数字签名applet打包格式为cab,签名方式也和我们下面描述的内容不同,有兴趣的读者可以去查找相关资料,总之是不通用的。
如果是正规的公司,数字证书都是需要购买的,像Verisign之类的公司,提供这样的服务,它的好处就是确保证书是全球唯一的,能够在出现事故时,鉴定是否是有效的数字证书,其实就类似于一份全球唯一的身份证,带有你自己才知道的密码,缺点就是不免费。
大家如果在线安装过软件,一般大公司的插件,例如Flash播放器等等,都会带有数字证书。
当然,在Java中,不需要这么麻烦,JDK已经提供了一个工具keytool.exe来让开发人员自己生成数字证书(至于安全,加密方面的话题,那就太繁杂了,读者可以自己去查找资料)。
如果不想使用命令行版本的这个工具,还可以下载一个开源的软件KeyToolGUI,详见参考资料一节的内容。
下面我们就快速进入主题,首先启动CMD命令行工具,然后进入到当前的项目目录,运行下面的命令:
keytool-genkey-dname"cn=BeanSoftStudio,ou=JavaSoftware,o=BeanSoftStudio,c=China"-aliasbeansoft-keypassbeansoft-storepassbeansoft-validity365-keystore.\beansoft
这段命令将会创建一个数字文件放在当前目录的二进制文件beansoft中。
该证书的别名是beansoft(通过-alias指定),密钥的密码是beansoft(-keypass命令指定),存储密钥的文件密码也是beansoft(-storepass命令指定),证书的有效期是365天(通过-validity指定),
并把它存储到密码文件beansoft中。
这段命令执行后,没有出错信息的话即是创建成功。
另外,如果是实际的项目的话,最好将两个密码设置成安全级别比较高的密码。
除了这样来生成一个密钥文件外,还可以用KeyTool以交互的方式来生成(比较推荐初学者使用这种方式):
keytool–genkey
随后,会提示您输入必须或者可选的内容。
随后我们可以检查下这份证书文件的内容,执行下面的命令:
keytool-list-keystore.\beansoft-storepassbeansoft
会输出信息:
Keystore类型:
JKS
Keystore提供者:
SUN
您的keystore包含1输入
beansoft,2008-5-7,PrivateKeyEntry,
认证指纹(MD5):
16:
15:
A0:
47:
92:
96:
29:
96:
93:
5D:
F0:
76:
F7:
D0:
2C:
84
。
这说明证书没有问题。
有时可能需要导出证书供人使用,可以执行下面的命令:
keytool-export-keystore.\beansoft-storepassbeansoft-filebeansoft.cer-aliasbeansoft
随后会生成一个beansoft.cer,不过在这里对Applet签名是不需要这样做的,只有在做SSL开发时,才能用得到它。
随后,请读者按照16.1.3.1JAR文件一节所介绍的内容,将Applet的类文件打包成jar文件,名为applets.jar,放在项目的根目录下。
接着就进入最关键的,对JAR文件进行签名了,键入下列命令:
jarsigner-verbose-keystore.\beansoftapplets.jarbeansoft
接着提示信息为:
输入密钥库的口令短语:
beansoft按下回车,即可看到签名过程:
正在添加:
META-INF/MANIFEST.MF
正在添加:
META-INF/BEANSOFT.SF
正在添加:
META-INF/BEANSOFT.DSA
正在添加:
applets/
正在签名:
applets/FileOperationApplet.class
正在签名:
applets/LifeCycleApplet.class
正在签名:
applets/MyApplet.class
正在签名:
applets/usb.jpg
可以看到META-INF目录下将会多出两个数字指纹文件,运行的时候JVM将会和类文件进行对比,确保文件没被人篡改过。
好了,现在的applets.jar已经今非昔比了,它是个被签名过的JAR,怎么使用它呢?
需要在它所在的同一目录下,即项目根目录下,新建一个HTML文件,代码清单如下:
FileOperationAppletSigned.html
唯一的不同,就是多了粗斜体的archive="applets.jar"这句话。
好了,最激动人心的时刻到来了,请用浏览器打开这个网页,会看到一个安全提示,如图18.7所示。
点击运行按钮,即可看到正确的执行了操作,在用户的C盘上创建了一个文件!
很好,我们可以为所欲为了,像写普通Java应用那样来写Applet了!
如果点击取消按钮,那很自然的无法创建文件,用户拥有选择权,当然,如果是企业的客户,自然都是让他们选择运行按钮。
其实通过这里读者也可以注意到,现在好多网站(例如视频分享的网站等),都会提示您下载一些插件提供增强的功能,然而,他们的数字证书和这里的一样,都是自己造的(其实就是伪造),所以,装完后并不能保证是否夹杂了病毒或者恶意代码,所以读者上网时千万要谨慎识别,不要随意点击在线安装或者运行软件。
18.7Applet数字签名安全提示
OK,罗罗嗦嗦的讲了这么老半天,就是希望给那些使用Applet的用户提供一个相对完整的实践方案,也许现在能在项目中用到AWT,Swing的地方,也就剩下Applet了。
接下来讨论在网页中使用Applet的进一步功能:
参数传递和调用JavaScript。
导出jar包:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Applet 安全 限制 签名 Appletjar 数字签名 jdk