本系统的客户程序是Java Applet,但它的执行需要读本地硬盘,以及进行安全算法方面
操作,这些操作都需要有本地Application的权限,而无法在普通的沙箱机制的限制下运
行。
1 沙箱机制对Applet的安全性限制
在浏览器或者appletviewer中运行远程主机上存放的Applet时,Java VM认为它是不可信
任的,将其置于所谓sandbox的保护之下,在这样的情况下Applet的运行受到下面的限制
:
b) Applet不能读写客户端主机上的文件
c) Applet不能执行JCE/JCA中的addProvider操作
d) 在进行网络连接时Applet只能与提供它的服务器建立连接
e) Applet在事件捕获、读取系统信息等其他方面受到限制
f) 在Netscape浏览器中,不提供java.security.*的支持,在IE浏览器中对Applet的运行
做了比appletviewer中更加高的限制
由于上述的限制,安全公文传递系统的客户程序直接在浏览器或appletviewer中运行时会
遇到下列问题:
b) 客户程序无法读写客户机的存储设备
c) 客户程序无法执行addProvider操作
d) 在使用额外类库时发生Security Exception
e) 在Netscape浏览器中因为缺乏java.security.*的支持而完全无法运行
bitsCN_com
f) 在IE浏览器中发生更多的Security Exception
产生这些问题的原因是各种java VM将公文系统的客户程序视为不可信任的。解决的方法
是要使Java VM信任公文系统的客户程序。
3 Applet的签名和信任机制
要使Applet得到虚拟机的信任就要有办法让虚拟机知道Applet是可信任的人提供的。SUN
、Netscape
Communicator和IE4.0各自提供了一套互相之间不兼容的Applet签名机制。它们的原理都
是相同的,就是通过验证一个可信任的签名者的数字签名,来验证Applet是由可信任的作
者提供的。在安全公文传递系统中我们采用了SUN提供的签名机制,并通过安装java
plugin使得在各种浏览器中都可以使用这套签名机制。
SUN在JDK1.X版本中提供了一个名为javakey的小程序。它能够替开发者完成对Applet进行
数字签名的所有步骤,也能替最终用户完成设置对开发者信任的工作。要对Applet进行数
字签名之前,必须用JDK的另外一个工具程序jar将applet中用到的类打包成一个.JAR文件
。这样建立一套基于ja
vakey的Applet签名和信任体系包括下列三项工作:
* 用jar工具创建.JAR文件
* 用javakey创建数字签名 bitsCN_com
* 在客户端安装java plugin,并设置对签名人的信任
下面分别阐述这三项工作。
4 用jar工具创建.JAR文件
JAR是Java
Archive的缩写。Jar工具的主要功能是将文件压缩和打包。JDK提供jar工具的目的主要是
让用户可以将applet中用到的class文件和其他文件压缩打包到一个文件中,当浏览
applet时通过一从http的传输将它们一并下载到客户端,节省多次下载多个小文件所浪费
的协议建立时间。客户程序
在下载了applet的.jar文件后就可以运行applet而无需再继续下载其他文件了。Javakey
在生成数字签名时要求有关的类都打包在一个.jar文件中,它生成的数字签名也会自动添
加到这个.jar文件中去。
使用了.jar文件后html中的applet标记略有不同,比普通的多出了一个archive项,例如
:
jar是命令行工具,常用的形式有:
jar cf myjarfile *.class:将当前目录的所有.class文件加到文件myjarfile中去
jar cvf myjarfile mydir:将mydir里面所有文件加到文件myfile中去 需要什么来搜一搜吧so.bitsCN.com
jar工具的详细使用方法在JDK的文档有介绍。
6 用javakey创建数字签名
javakey包括非常丰富的命令和参数,能够为用户创建密钥对和证书。详细的说明可以在
JDK的文档中找到。简单来说,用javakey创建运行带数字签名的.jar文件主要包括下列步
骤:
2. 创建signer并设置为信任的,格式为:
javakey cs jiewen true
如果创建时没有指定true参数,新建的signer将是不信任的,可以用
javakey t jiewen true
5. 创建公钥/私钥对,由于SUN本身提供对DSA算法的实现,所以一般都创建DSA的密钥对
:
javakey gk mysigner DSA 512
512表示密钥长度为512位
8. 创建signer的证书,创建证书时需要编辑一个说明文件说明证书的内容,创建证书的
命令行格式为:
javakey -gc 说明文件
说明文件的主要内容为:
issuer.name=jiewen
#签发人名字,如果没有则指定自己的名字
#issuer.cert=1
#如果签发人不是自己,则要指定这项
subject.name=jiewen
#拥有人的名字
subject.real.name=Zheng Jiewen
subject.org.unit=Nc
subject.org=Scut
bitsCN_net中国网管博客
subject.country=China
#以上为拥有人的详细资料
start.date=19 Aug 1998
end.date=19 Aug 1999
#有效期
serial.number=1001
#序列号
out.file=cert.cer
#输出文件名称
12. 对JAR文件进行数字签名,需要编辑一个说明文件来说明签名操作的细节。命令行为
:
javakey -gs 说明文件 jar文件
说明文件的主要内容为:
signer=jiewen
#指定签名人
cert=1
#指定用签名人的哪个证书
chain=0
#必须指定但没有意义
signature.file=jiewen
#签名存储在哪个文件里面
out.file=out.jar
#输出的jar文件的文件名
14. 在客户端创建signer,并信任之:
javakey c jiewen true
16. 在客户端安装signer的证书,命令行为:
javakey ic jiewen jiewen.cer
jiewen为signer的名字,jiewen.cer为存放证书的文件。
完成上述操作后客户端的appletviewer就能够以信任方式来运行签名了的applet了。这时
applet获得的权限和本地的application是一致的。
7 安装和配置Java plugin bitsCN_com关注网管是我们的使命
Java plugin是一个浏览器的plugin产品。在浏览器中安装了这个plugin后用户就可以在
浏览器环境下用SUN的Java虚拟机来运行网页中的applet了。安全公文传递系统的客户程
序用javakey进行数字签名,必须在SUN的java虚拟机中才能被识别,因此必须在客户端安
装java plugin。
Java plugin并不能令普通的含有applet标记的html文件在SUN的java虚拟机中运行applet
,它只认识为它设计的特殊标记。为了产生含有这样特殊标记的文件,可以到SUN的站点
下载专门的转换器,将含有applet标记的html文件转换为含有java plugin使用的html标
记的文件。
Java plugin的安装非常简单,只需下载安装文件并运行之,安装程序就会自动完成安装
工作了。但是单纯安装java plugin是无法以信任方式运行客户程序的,还要在java
plugin的运行环境中设置对signer信任和安装signer的证书。要做到这点,必须分两步进
行。
首先要知道java plugin的home目录是什么,方法是:运行java plugin的control panel
,打开里面的Show Java Console选项,然后到浏览器里面浏览要运行的applet所在的网
页,这时就会出现java console窗口,里面有一行是User home directory = 厖,就是当 bbs.bitsCN.com国内最早的网管论坛
前的home目录了。
知道了home目录后就要把包含有信任信息和签发人证书的文件拷贝到这个目录中去。如果
用户有jdk的话,可以用jdk的javakey工具按照前面的说明来设置信任和安装证书,然后
在jdk的安装目录(如果使用windows)或者用户的home目录(如果使用unix)找到一个名
字为identitydb.obj的
文件,将这个文件拷贝到java plugin的home目录中,设置的信任就生效了。如果用户没
有jdk,可以下载安装jdk来创建这个文件,或者可以从别人处拷贝这个identitydb.obj文
件,并安装到自己的java plugin的home目录中。
另外,如果是在局域网内,也可以在浏览器内设置安全级别,将Applet所在的主机设成可信
任的站点,这样就可以设置Applet的安全级了.IE4是可以的,别的没试过.
用Applet写的java小程序如果没有经过签名,那么访问客户端程序下载后会受到安全限制;沙箱机制对Applet的安全性限制在浏览器或者appletviewer中运行远程主机上存放的Applet时,Java VM认为它是不可信任的,将其置于所谓sandbox的保护之下,在这样的情况下Applet的运行受到下面的限制 :
a) Applet不能读写客户端主机上的文件
b) Applet不能执行JCE/JCA中的addProvider操作
c) 在进行网络连接时Applet只能与提供它的服务器建立连接
d) Applet在事件捕获、读取系统信息等其他方面受到限制
e) 在Netscape浏览器中,不提供java.security.*的支持,在IE浏览器中对Applet的运行做了比appletviewer中更加高的限制
怎样对java小程序签名受到很多人的关注,网上也有这些方面可供参考的文档,但都不是完整,在这里我给出一份可具体操作的文档,希望能给大家一些帮助。场景:test.jar:内含待签名的java小程序结果:签名后,客户端能自动下载java小程序,且java小程序能访问客户端的任何资源
步骤:
(1)将java小程序打包
<wbr> jar cvf test.jar test.class</wbr>
(2)生成名为chinani.store的密钥库,别名为chinani
<wbr> keytool -genkey -keystore chinani.store -alias chinani</wbr>
密码:123456 (根据需要自己输入) 以下根据需要输入,最后确认:y
(3)导出chinani.cer数字证书
<wbr> keytool -export -keystore chinani.store -alias chinani</wbr>
<wbr></wbr>
4)对test.jar文件进行签名
<wbr> jarsigner -keystore chinani.store<wbr> test.jar chinani<br><span>密码:123456 (根据需要自己输入)</span></wbr></wbr>
最后写一个html文件,运行此文件即可自动下载安装运行java小程序HTML文件
<wbr></wbr>
<wbr></wbr>
命令整理:
<wbr></wbr>
<wbr><wbr><wbr> 1.jar cvf MWRFJavaAPI..jar *.class<br> 此命令生成一个名为MWRFJavaAPI..jar的包</wbr></wbr></wbr>
2.为刚才创建的包文件(MWRFJavaAPI..jar)创建store和keys。其中,store将用来存放密匙(private keys)和公共钥的认证,alias别名这儿取为monitor。 命令如下:
<wbr><wbr><wbr><wbr> keytool -genkey -keystore card.store -alias card</wbr></wbr></wbr></wbr>
此命令生成了一个名为card.store的store文件,接着这条命令,系统会问你好多问题,比如你的公司名称,你的地址,你要设定的密码等等,都由自己的随便写。
<wbr></wbr>
3.使用刚才生成的钥匙来对jar文件进行签名 命令如下:
jarsigner -keystore card.store MWRFJavaAPI..jar card
这个命令将对MWRFJavaAPI..jar文件进行签名,不会生成新文件。
4.将公共钥匙导入到一个cer文件中,这个cer文件就是要拷贝到客户端的唯一文件 。 命令如下:
keytool -export -keystore card.store -alias card -file card.cer
此条命令将生成card.cer认证文件,当然这几步都有可能问你刚才设置的密码。这样就完成了服务器端的设置。这时你就可以将jar文件和store文件以及cer文件(我这儿是MWRFJavaAPI.jar,card.store,card.cer)拷贝到服务器的目录下了,我用的是weblogic6.0,所以就拷贝到C:\bea\wlserver6.0\config\mydomain\applications\DefaultWebApp_myserver下的自己建的一个目录下了。
分享到:
相关推荐
在JavaApplet中,数字签名是一个至关重要的概念,它确保代码的完整性和来源的可信性,防止恶意篡改。本篇文章将深入探讨JavaApplet的数字签名方法以及如何使用打包签名工具JavaAutoPlug.exe来实现这一过程。 首先,...
在Java中,对Applet签名意味着使用私钥对Applet的字节码进行加密,然后使用对应的公钥验证。这使得用户可以检查Applet是否来自可信的源,并决定是否给予额外的权限。 **签名步骤** 1. **获取证书**:首先,你需要一...
恶意用户可能通过诱骗用户下载并安装包含恶意代码的Applet,或者攻击者可能试图绕过签名验证。因此,用户应该只信任来自可靠来源的签名Applet,并保持Java运行时环境的更新,以防止已知安全漏洞被利用。 总的来说,...
具体而言,Applet的创建者使用私钥对Applet进行签名,然后用户端(通常是浏览器)使用相应的公钥验证签名的有效性。 - **数字签名的必要性**:由于Java Applet运行于用户的计算机上,因此需要采取额外的安全措施来...
为了打破这些限制并确保代码的来源可信,Java引入了“Applet签名”这一概念。 Applet签名是Java平台为了保护用户安全而实施的一项机制,它允许开发者证明其代码的来源和未被篡改。签名过程涉及到了公钥加密技术,...
这个"javaapplet"压缩包可能包含了用于教学或示例的Applet程序,适合初学者了解和学习。下面我们将深入探讨Java Applet的相关知识点。 **一、Java Applet的基本概念** Java Applet是一种特殊的Java程序,它被嵌入...
本教程将详细介绍在Java 2环境下,如何为Applet进行数字签名,以及相关的Java知识。 一、Java Applet与数字签名 1. Java Applet:Java Applet是一种可以在Web浏览器中运行的Java小程序。它们通过Java插件(现在已...
- 如果需要更多的权限,可以使用签名的Applet,但必须谨慎处理,因为这可能会带来潜在的安全风险。 6. **现代替代方案** - 随着技术的发展,Java Applet的重要性已逐渐下降,现代浏览器不再支持Java Applet。 - ...
1. **身份验证**:签名验证了Applet是由声称的发布者创建的,因为只有拥有相应私钥的开发者才能生成有效的签名。 2. **完整性检查**:数字签名能够检测到Applet在传输过程中是否被篡改,确保用户接收的代码未经修改...
未签名或签名验证失败的Applet可能会被浏览器拒绝运行。 4. **权限问题**:由于安全限制,Applet运行在沙箱环境中,不能访问本地文件系统或网络资源。如果Applet试图执行超出其权限的操作,会抛出异常。 5. **编译...
- **数字签名和证书**:Applet可以使用数字签名来验证其来源,以防止恶意代码。同时,Servlet服务器也可以使用数字证书来建立信任连接。 - **身份验证与授权**:实施用户身份验证机制,例如HTTP基本认证、表单认证...
在IT领域,尤其是在Java开发中,Applet签名与JAR文件签名是确保代码来源可信、保护用户免受恶意代码侵害的重要环节。以下是对标题“applet签名方法”以及描述“applet签名 jar签名工具”的详细解析,涵盖相关知识点...
五、Applet签名和安全问题 由于Applet运行在用户机器上,可能会对系统安全构成威胁。因此,从Java 2 SDK 1.2开始,引入了数字签名的概念,以验证Applet的来源和授权。未签名的Applet可能受到浏览器的安全限制,如...
如果签名验证通过,则允许Java小程序在客户端执行。这种方法既保障了程序的安全性,又能够赋予经过认证的Java程序更多的执行权限。 本文还提到了数字签名在解决纠纷方面的作用,即提供了第三方仲裁机构验证签名有效...
为了确保Applet的安全性,避免恶意代码对用户系统造成损害,Java引入了Applet签名机制。通过签名,不仅可以验证Applet的来源,还可以赋予其访问客户端资源的权限。 #### 二、Applet签名的重要性 1. **验证来源**:...
Applet是Java的一个早期特性,允许在Web浏览器中运行小型的Java程序,而Swing则是Java GUI(图形用户界面)工具包,提供了丰富的组件来构建桌面应用程序。 描述中提到“Applet与Swing编写一个简单的HTML浏览器”,...
总结来说,要超越Java Applet的安全限制,开发者可以为Applet的代码进行数字签名,然后配置Policy文件,赋予Applet特定的权限,如访问本地文件系统或特定网络资源。这种方式使得Applet可以在用户同意的情况下执行更...
Applet签名制作是Java开发中的一个重要环节,尤其是在早期的Web应用程序中,Applet是一种常见的用于在浏览器中执行Java代码的小程序。为了确保Applet的安全性和防止恶意代码的运行,Java引入了签名机制。本文将详细...
因此,`mupload`可能使用了数字签名来验证Applet的来源,防止恶意代码的注入。同时,Applet的权限控制也是关键,通过设置`applet.policy`文件,我们可以限制Applet对本地资源的访问,只允许其进行必要的文件读写操作...
3. **权限管理**:在Java Web Start或Applet等场景下,签名的JAR文件可以获得更多的系统权限,例如读写文件、访问网络等。 4. **防止中间人攻击**:通过证书链验证,确保数据在传输过程中未被第三方篡改。 实现Java...