首先声明,我是个Java初学者,在这里谈一谈Applet和数字签名的问题。
据我所知Applet实现对本地文件进行读写的方法有两种。
1.修改Java_Home\lib\security\java.security文件,并把自己写好的.policy文件放到指定的目录中。
2.对Applet所在的Jar包进行数字签名。
先说说修改Policy文件的方法。这个方法实现起来比较简单,而且只要在.policy文件中进行一定的设置,Applet程序几乎就可以访问本地磁盘里的所有文件了。但是这种方法的一个最大缺点就是要改客户端Jre的java.security文件。在实际应用中,这样的做法不太现实。不可能每个用户为了用你这个Applet去修改自己的安全配置文件,况且很多用户根本不知道Jre是什么。
再说说数字签名的方法,网上也有很多关于数字签名的文章,在这里就不敖述了。大概的方法是:
1、keytool -genkey -keystore someone.store -alias someone 这个命令用来产生一个密匙库,执行完毕后会在当前目录下产生一个soneone.store的文件,这里的someone是我自己写的名字,你可以对它进行修改。另外在执行命令的时候还有提示你输入密匙库的密码,这里你一定要记住,否则后面要用的时候无法输入。
2、给你的Applet打包成jar文件,这个都会吧?jar -cvf ****.jar / .
3、给jar包签名:
jarsigner -keystore someone.store MyApplet.jar someone
这个命令就是用我们刚刚生成的密钥给jar文件进行签名。
问题来了,是不是只要有了数字签名那Applet就可以在任何情况下读写任何文件呢?好像不是那么回事!
今天就遇到一个问题我写了一个 Applet,这个Applet的基本功能是文件的上传和下载。既然是上传就要从本地读文件,下载当然要往本地写文件了。原来用了修改Policy的方法,可以很顺利地实现上传下载。但想想需要每个客户端都要修改Policy不太可行。于是决定用数字签名。
我用了上述方法给我的Jar包签了名,但是当我上传文件的时候出了问题java.secruity.AccessControlException: access denied (java.io.FilePermission myfile.dat read)
怎么回事?下载文件的时候也是同样的问题。后来终于搞清楚了。
先说说我的页面结构:页面就是一个普通的html静态页面,html页面中嵌入了一个Applet对象和三个<input>按钮分别是《上传》《下载》《关闭》并通过JavaScript来调用Applet中的上传,下载的方法。问题就是出在这里。从Java的安全模型上我们应该不难理解问题的原因了吧。虽然Applet是已经签过名的,但是如果被JavaScript调用并试图访问本地资源,这就违背了Java的安全策略,所以当然会抛异常。
解决的方法就是让Applet自己独立来完成上述的上传,下载工作。即把页面里的《上传》,《下载》按钮放到Applet里面。问题解决!
第一次写文章,不足之处请多指摘!
分享到:
相关推荐
为了解决这个问题,Java引入了数字签名机制,确保Applet的来源可信且未被篡改。 **数字签名的概念** 数字签名是一种用于验证电子文档完整性和发送者身份的技术。它通过加密算法对数据进行哈希运算,然后使用私钥对...
总结来说,要超越Java Applet的安全限制,开发者可以为Applet的代码进行数字签名,然后配置Policy文件,赋予Applet特定的权限,如访问本地文件系统或特定网络资源。这种方式使得Applet可以在用户同意的情况下执行更...
在Java Applet环境中,数字签名对于增强安全性和实现特定功能(如访问本地文件系统)至关重要。数字签名通过使用公钥加密技术来实现。具体而言,Applet的创建者使用私钥对Applet进行签名,然后用户端(通常是浏览器...
2. **编辑策略文件**:在策略文件中添加必要的权限条目,例如允许访问本地文件系统。 3. **安装策略文件**:使用`policytool -installpolicy -file mypolicy.policy`命令安装策略文件。 ##### 3.4 对Applet程序进行...
- Applet的安全模型:由于运行在用户机器上,Applet受到安全沙箱限制,不能访问本地文件系统或网络资源,除非用户明确授予权限。 - 数字签名:为了突破安全限制,开发者可以对Applet进行数字签名,以增加信任度。 ...
签名的Applet可以获得更多的权限,如访问本地文件系统或网络资源。 7. **浏览器支持**:Applet的运行需要Java插件,而现代浏览器如Chrome和Firefox已经不再支持Java插件,这意味着Applet的使用已经大大减少。 8. *...
签署Applet是一个额外的过程,涉及到数字签名和证书。 5. **编码实现**:具体实现时,可以使用BufferedInputStream和BufferedOutputStream来提高读写效率,同时处理可能出现的异常。在Applet的`init()`或`start()`...
- 对于Applet,必须考虑数字签名和Java安全策略,确保代码安全可靠,不会被恶意利用。 8. **优化**: - 图片预加载:提前加载用户可能需要的图片,提高用户体验。 - 内存管理:合理使用缓存,避免内存泄漏。 9....
现代浏览器对Applet有严格的沙箱限制,可能需要数字签名来提升权限。同时,用户可能会对Web上的FTP访问有所顾虑,因此设计时需注意隐私保护和权限控制。 6. **用户界面设计**:作为Web组件,FTP客户端Applet需要一...
开发者需要考虑到这些限制,可能需要使用Java Web Start或Applet签名校验来提升权限。同时,优化Applet的性能和用户体验,如减少网络传输的数据量,优化UI响应速度等,也是必不可少的。 7. 示例代码分析 在“java写...
同时,Applet的权限控制也是关键,通过设置`applet.policy`文件,我们可以限制Applet对本地资源的访问,只允许其进行必要的文件读写操作。 在服务器端,可能使用Servlet或者Spring MVC等框架来接收和合并文件块。...
数字签名是利用私钥对消息摘要进行加密,接收者使用公钥解密并验证摘要,从而确保数据未被篡改且发送者身份可靠。`java.security.Signature`类提供了数字签名的功能。 总结来说,Java提供的安全通信机制包括了消息...
无论是本地还是远程的代码,都需要遵循一个安全策略(security policy),这个策略定义了不同来源和签名者的权限控制,详细规定了对系统资源如文件、目录和端口的访问权限。代码被组织到独立的域(domains)中,每个...
这包括但不限于对本地文件系统的访问权限。签名Applet的具体步骤包括生成密钥对、创建数字证书等。 - **编码/解码**:为了提高传输效率或满足特定需求(如降低带宽消耗),可采用GSM编码对音频数据进行压缩。这可以...
在策略文件中定义各种权限类和权限名称,允许代码在不同域中拥有不同的访问权限。例如,可以指定一个Applet的权限,限制其访问本地文件系统的能力。 Java安全工具中,还包括Jarsigner工具,它用于对Java归档文件...
这通常通过设置`<applet>`标签的`codebase`和`archive`属性,以及使用数字签名来实现。 需要注意的是,由于Java Applet的安全性和兼容性问题,现代Web开发中已经很少使用Applet。现在,更多地推荐使用Java Web ...
3. **签名与验证**:为了确保安全,JAR文件可以被数字签名,JWS会在运行前验证签名,防止篡改。如果签名验证失败,JWS将阻止应用的运行。 4. **系统属性**:应用对系统属性的访问受到限制,只有JNLP定义的属性可读/...
在"java_sec2(JAVA2安全书的例子)"中,可能涵盖了这些概念的实践示例,例如如何设置和使用安全管理器,如何处理权限问题,以及如何利用Java的加密库实现安全通信等。通过深入学习和理解这些例子,开发者可以更好地...