`
lihongyang66
  • 浏览: 75034 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

Applet安全限制和签名Applet

    博客分类:
  • JAVA
阅读更多

    因为 Applet 在浏览器中运行,所以,并不是什么操作都能做,例如不能读写创建文件,不能任意连接网站等等,总之就是不可威胁用户电脑的信息安全。下面我们来试试看,新建一个文件操作的 Applet ,代码清单如下:

 

applets.FileOperationApplet

package applets;

 

import java.applet.Applet;

import java.awt.Label;

import java.io.*;

 

public class FileOperationApplet extends Applet {

    public void start() {

       try {

           FileWriter out = new FileWriter("c:\\test.txt");

           out.write("测试写入文件");

           out.close();

           add(new Label("文件写入成功"));

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

           add(new Label("文件写入失败"));

       }

    }

}
 

。首先我们用 Eclipse 来运行,当然没问题,因为模拟器为了调试方便,是运行所有的操作的,运行后,界面显示文件写入成功,并且在 C 盘根目录下可以找到文件 test.txt ,并看到文件内容。随后我们创建 HTML 文件,打算在网页文件中运行它,文件代码清单如下:

FileOperationApplet.html

<html>

<body>

<applet code=applets.FileOperationApplet.class width="200" height="200" >

</applet>

</body>

</html>
 

,接着用浏览器打开这个网页,可以看到如图 18.6 所示的出错界面和信息提示。这个出错信息完整的内容是:

java.security.AccessControlException: access denied (java.io.FilePermission c:\test.txt write)

       at java.security.AccessControlContext.checkPermission(Unknown Source)

       at java.security.AccessController.checkPermission(Unknown Source)

       at java.lang.SecurityManager.checkPermission(Unknown Source)

       at java.lang.SecurityManager.checkWrite(Unknown Source)

       at java.io.FileOutputStream.<init>(Unknown Source)

       at java.io.FileOutputStream.<init>(Unknown Source)

       at java.io.FileWriter.<init>(Unknown Source)

       at applets.FileOperationApplet.start(FileOperationApplet.java:10)

       at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)

       at java.lang.Thread.run(Unknown Source)

,即:访问拒绝,不能写入文件 c:\test.txt 。这很安全,不是吗?

 

      然而实话实说, Applet 在企业内部网上,还是很有用处的,它一般可以用来做一些复杂的操作,或者是大文件的上传下载,即时消息支持等等,笔者见过不少这样的解决方案(网络上也有人制作了 Applet 批量文件上传的功能)。不过,这样的限制,虽然是安全了,但是却让 Applet 的功能大打折扣,那么有没有办法绕过这层安全限制呢?答案是肯定的,这就是 Java 中推出的签名 JAR 功能,可以帮助我们在用户同意的情况下,绕过安全限制(当然在内部网没有问题,如果是外网,很容易发生恶意代码,例如恶意删除文件等等)。

       注意: 由于 Microsoft 也推出了一款 JVM ,导致了 Java 标准的分裂,微软格式的数字签名 applet 打包格式为 cab ,签名方式也和我们下面描述的内容不同,有兴趣的读者可以去查找相关资料,总之是不通用的。

       如果是正规的公司,数字证书都是需要购买的,像 Verisign 之类的公司,提供这样的服务,它的好处就是确保证书是全球唯一的,能够在出现事故时,鉴定是否是有效的数字证书,其实就类似于一份全球唯一的身份证,带有你自己才知道的密码,缺点就是不免费。大家如果在线安装过软件,一般大公司的插件,例如 Flash 播放器等等,都会带有数字证书。当然,在 Java 中,不需要这么麻烦, JDK 已经提供了一个工具 keytool.exe 来让开发人员自己生成数字证书(至于安全,加密方面的话题,那就太繁杂了,读者可以自己去查找资料)。如果不想使用命令行版本的这个工具,还可以下载一个开源的软件 KeyTool GUI ,详见参考资料一节的内容。下面我们就快速进入主题,首先启动 CMD 命令行工具,然后进入到当前的项目目录,运行下面的命令:

 

keytool -genkey -dname "cn=BeanSoft Studio, ou=Java Software, o=BeanSoft Studio, c=China" -alias beansoft -keypass beansoft -storepass beansoft -validity 365 -keystore .\beansoft

 

这段命令将会创建一个数字文件放在当前目录的二进制文件 beansoft 中。该证书的别名是 beansoft (通过 -alias 指定),密钥的密码是 beansoft -keypass 命令指定),存储密钥的文件密码也是 beansoft - storepass 命令指定),证书的有效期是 365 天(通过 -validity 指定),

 

并把它存储到密码文件 beansoft 中。这段命令执行后,没有出错信息的话即是创建成功。另外,如果是实际的项目的话,最好将两个密码设置成安全级别比较高的密码。除了这样来生成一个密钥文件外,还可以用 KeyTool 以交互的方式来生成(比较推荐初学者使用这种方式):

keytool –genkey

随后,会提示您输入必须或者可选的内容。

       随后我们可以检查下这份证书文件的内容,执行下面的命令:

keytool -list -keystore .\beansoft -storepass beansoft

会输出信息:

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 -storepass beansoft -file beansoft.cer -alias beansoft

随后会生成一个 beansoft.cer ,不过在这里对 Applet 签名是不需要这样做的,只有在做 SSL 开发时,才能用得到它。

       随后,请读者按照 16.1.3.1 JAR 文件一节所介绍的内容,将 Applet 的类文件打包成 jar 文件,名为 applets.jar ,放在项目的根目录下。接着就进入最关键的,对 JAR 文件进行签名了,键入下列命令:

jarsigner -verbose -keystore .\beansoft applets.jar beansoft

接着提示信息为:

输入密钥库的口令短语: 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

<html>

<body>

<applet code=applets.FileOperationApplet.class archive="applets.jar" width="200" height="200" >

</applet>

</body>

</html>
 

唯一的不同,就是多了粗斜体的 archive="applets.jar" 这句话。

       好了,最激动人心的时刻到来了,请用浏览器打开这个网页,会看到一个安全提示,如图 18.7 所示。点击运行 按钮,即可看到正确的执行了操作,在用户的 C 盘上创建了一个文件!很好,我们可以为所欲为了,像写普通 Java 应用那样来写 Applet 了!如果点击取消 按 钮,那很自然的无法创建文件,用户拥有选择权,当然,如果是企业的客户,自然都是让他们选择运行按钮。其实通过这里读者也可以注意到,现在好多网站(例如 视频分享的网站等),都会提示您下载一些插件提供增强的功能,然而,他们的数字证书和这里的一样,都是自己造的(其实就是伪造 ),所以,装完后并不能保证是否夹杂了病毒或者恶意代码,所以读者上网时千万要谨慎识别,不要随意点击在线安装或者运行软件。


Applet 数字签名安全提示

  • 大小: 17.7 KB
分享到:
评论

相关推荐

    applet签名的方法

    虽然签名Applet可以扩展其功能,但也带来了安全风险。如果私钥被泄露,恶意用户可能冒充你的身份发布恶意代码。因此,必须妥善保管私钥,避免被未经授权的人员获取。 **本地操作的权限** 一旦Applet被签名并被用户...

    applet签名

    Java Applet,简称Applet,是Java语言在Web浏览器中运行的一种小程序,它可以在用户的计算机上执行,提供了丰富的用户交互体验。...同时,用户也应该对签名Applet保持警惕,只信任来自可靠源的签名代码。

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

    这篇文档探讨了如何通过数字签名来超越这些安全限制,使Applet能够执行更高级别的任务。 首先,Java的安全性是其设计的核心部分,体现在三个方面: 1. **语言特性**:Java语言本身包含了一些安全特性,如数组边界...

    Ant打包Applet并添加数字签名

    由于安全限制,Applet需要进行数字签名才能在用户的计算机上执行。本文将详细讲解如何使用Ant来打包Applet并添加数字签名。 首先,理解Ant的基本结构。Ant的构建文件通常命名为build.xml,它包含了各种构建任务和...

    applet签名 方法

    使用`keytool`和`jarsigner`工具,开发者能够生成并管理密钥对,对代码进行数字签名,从而提升用户信任度,保障应用程序的合法性和安全性。这对于任何涉及网络通信或本地资源访问的Java应用程序来说,都是必不可少的...

    MyEclipse图形界面开发Swing_SWT

    - **Applet安全限制和签名Applet** 为了防止恶意代码的危害,Applet默认只能访问沙箱内的资源。如果Applet需要访问更多的权限,可以采用签名机制。通过签名的Applet可以获得额外的信任级别,从而拥有更广泛的访问...

    第十八章 图形界面开发--AWT,Swing,SWT.pdf

    ##### 18.2.4 Applet安全限制和签名Applet 为了保护用户的计算机不受恶意Applet的侵害,Java平台对Applet实施了一系列安全限制,例如禁止Applet访问本地文件系统。对于需要特殊权限的Applet,可以通过签名机制来...

    图形界面开发--AWT,Swing,SWT

    **18.2.4 Applet安全限制和签名Applet** 由于Applet在用户计算机上运行,为了防止恶意代码损害用户系统,Java平台实施了一系列的安全限制。开发者可以通过对Applet进行数字签名来获得额外的信任权限。 **18.2.5 ...

    applet下载操作及权限问题

    5. **签名Applet** - **使用工具**:可以使用Java的`jarsigner`工具对Applet的.jar文件进行签名,需要提供私钥和证书。 - **验证签名**:用户浏览器会验证签名的有效性,确保Applet未被篡改。 6. **安全提示** -...

    java的applet实例

    - Applet可以使用`signed`方式签名,以获取更多的系统权限,但这样可能会带来安全风险。 5. **Applet的替代技术** - JavaScript和AJAX提供了更灵活、更易于实现的客户端交互功能,而无需Java插件。 - Java Web ...

    Start Applet Demo

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

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

    这是一个涉及到Applet生命周期、安全限制和签名Applet的概念的综合实践。 1. **Applet生命周期**: - `init()`方法:这是Applet的初始化方法,当Applet首次加载时被调用。在这里,你可以设置初始状态,创建UI组件...

    java Applet技术文档

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

    applet教程

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

    applet例子

    4. **签名和安全**: 由于applet是在客户端运行,因此存在安全性问题。未签名的applet受到安全沙箱的限制,不能访问本地文件系统或网络资源,而签名的applet可以请求更多的权限。 **创建和运行Applet** 1. **编写...

    2022年Java2下Applet数字签名Java教程.docx

    Java 2下的Applet数字签名是确保Web应用程序安全和可信的关键环节。理解并正确实施这一过程对于开发安全的Java Applet至关重要。随着技术的演进,虽然Applet的使用逐渐减少,但其背后的数字签名概念在现代Web开发中...

    Java Applet与Java Servlet的安全通信策略与实现.rar_applet_applet servlet_jav

    - **代码审查**:对Applet和Servlet代码进行严格的安全审查,检查潜在的漏洞。 - **安全配置**:正确配置Web服务器和应用服务器,以限制非法访问。 7. **Java Applet的衰退** 虽然Java Applet曾经是Web开发的...

    做一个applet测试

    3. **编译与签名**:由于安全限制,现代浏览器不再直接支持未签名的Applet,因此你需要对Applet进行签名,以确保其可信任。这涉及到使用Java的`jarsigner`工具,为你的Applet类文件生成一个数字证书。 4. **部署**...

Global site tag (gtag.js) - Google Analytics