`
maincoolbo
  • 浏览: 524285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Applet签名验证

    博客分类:
  • java
阅读更多
本系统的客户程序是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小程序打包

  jar cvf test.jar test.class

(2)生成名为chinani.store的密钥库,别名为chinani

  keytool -genkey -keystore chinani.store -alias chinani

密码:123456 (根据需要自己输入) 以下根据需要输入,最后确认:y

(3)导出chinani.cer数字证书

  keytool -export -keystore chinani.store -alias chinani

 

4)对test.jar文件进行签名
  jarsigner -keystore chinani.store  test.jar chinani
密码:123456 (根据需要自己输入)

  最后写一个html文件,运行此文件即可自动下载安装运行java小程序HTML文件





命令整理:



    1.jar cvf MWRFJavaAPI..jar *.class
  此命令生成一个名为MWRFJavaAPI..jar的包

2.为刚才创建的包文件(MWRFJavaAPI..jar)创建store和keys。其中,store将用来存放密匙(private keys)和公共钥的认证,alias别名这儿取为monitor。 命令如下:
     keytool -genkey -keystore card.store -alias card

  此命令生成了一个名为card.store的store文件,接着这条命令,系统会问你好多问题,比如你的公司名称,你的地址,你要设定的密码等等,都由自己的随便写。



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下的自己建的一个目录下了。
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    js 动态调用 applet 内的方法示例程序

    步骤四:数字验证:jarsigner -keystore yourkey asbAttachmentUploadApplet.jar 对 asbAttachmentUploadApplet.jar 进行数字验证; 步骤五:将通过数字签名的 asbAttachmentUploadApplet.jar 拷贝至你项目自定义...

    JAVA_API1.6文档(中文)

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer ...

    JAVA安全性编程实例.doc及源码

    消息摘要,消息验证码,数字签名,口令保护,数字证书和证书链的生成、签发、检验和维护,SSL和HTTPS客户及服务器程序、基于代码位置和签发者的授权,签名Java Applet以及基于身份的验证和授权(JAAS)等。...

    JAVA上百实例源码以及开源项目

    产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    JAVA上百实例源码以及开源项目源代码

    产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    Java 1.6 API 中文 New

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供...

    Java案例开发锦集

    案例1 用户登录验证的完整程序 案例2 MD5的Javabean实现 案例3 用公钥计算消息摘要的验证码 案例4-1 Java中的数字证书的生成及维护方法 案例4-2 数字证书的签发(签名) 案例4-3 利用数字证书给...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

    java api最新7.0

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供...

    JavaAPI1.6中文chm文档 part1

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer ...

    Java安全性编程实例(徐迎晓)

    还介绍了定义自己的权限以及签名Java Applet。 # 第九章 # 解决的主要问题——身份验证和基于执行者身份的程序的安全运行 # 程序需要用户输入账号和口令到数据库登录,但以后可能需要改为智能卡验证。 # 程序...

    <Java安全性编程实例>书和代码

    &lt;Java安全性编程实例&gt;书和代码,内容涉及Java加密和解密,反编译和反反编译,对类、成员变量、方法的攻击和保护,消息摘要,消息验证码,数字签名,口令保护,...签名Java Applet以及基于身份的验证和授权(JAAS)等。

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    14.2 inner float:揭示java float类型内部性质的applet 14.3 浮点模式 14.3.1 浮点值集合 14.3.2 浮点值集的转换 14.3.3 相关规则的本质 14.4 浮点操作码 14.5 一个模拟:“circle of squares” ...

    Java 2平台安全技术-结构,API设计和实现

    7.5.3 实例3:产生并且验证签名 134 7.5.4 实例4:读取包含证书的文件 135 7.6 标准名 136 7.6.1 消息摘要算法 136 7.6.2 密钥和参数算法 136 7.6.3 数字签名算法 137 7.6.4 随机数产生算法 137 7.6.5 证书类型 137 ...

Global site tag (gtag.js) - Google Analytics