本系统的客户程序是Java Applet但它的执行需要读本地硬盘以及进行安全算法方面 操作这些操作都需要有本地Application的权限而无法在普通的沙箱机制的限制下运 行 沙箱机制对Applet的安全性限制 在浏览器或者appletviewer中运行远程主机上存放的Applet时Java VM认为它是不可信 任的将其置于所谓sandbox的保护之下在这样的情况下Applet的运行受到下面的限制
b) Applet不能读写客户端主机上的文件 c) Applet不能执行JCE/JCA中的addProvider操作 d) 在进行网络连接时Applet只能与提供它的服务器建立连接 e) Applet在事件捕获读取系统信息等其他方面受到限制 f) 在Netscape浏览器中不提供javasecurity*的支持在IE浏览器中对Applet的运行 做了比appletviewer中更加高的限制 由于上述的限制安全公文传递系统的客户程序直接在浏览器或appletviewer中运行时会 遇到下列问题 b) 客户程序无法读写客户机的存储设备 c) 客户程序无法执行addProvider操作 d) 在使用额外类库时发生Security Exception e) 在Netscape浏览器中因为缺乏javasecurity*的支持而完全无法运行 f) 在IE浏览器中发生更多的Security Exception 产生这些问题的原因是各种java VM将公文系统的客户程序视为不可信任的解决的方法 是要使Java VM信任公文系统的客户程序 Applet的签名和信任机制 要使Applet得到虚拟机的信任就要有办法让虚拟机知道Applet是可信任的人提供的SUN Netscape Communicator和IE各自提供了一套互相之间不兼容的Applet签名机制它们的原理都 是相同的就是通过验证一个可信任的签名者的数字签名来验证Applet是由可信任的作 者提供的在安全公文传递系统中我们采用了SUN提供的签名机制并通过安装java plugin使得在各种浏览器中都可以使用这套签名机制 SUN在JDKX版本中提供了一个名为javakey的小程序它能够替开发者完成对Applet进行 数字签名的所有步骤也能替最终用户完成设置对开发者信任的工作要对Applet进行数 字签名之前必须用JDK的另外一个工具程序jar将applet中用到的类打包成一个JAR文件 这样建立一套基于ja vakey的Applet签名和信任体系包括下列三项工作 * 用jar工具创建JAR文件 * 用javakey创建数字签名 * 在客户端安装java plugin并设置对签名人的信任 下面分别阐述这三项工作 用jar工具创建JAR文件 JAR是Java Archive的缩写Jar工具的主要功能是将文件压缩和打包JDK提供jar工具的目的主要是 让用户可以将applet中用到的class文件和其他文件压缩打包到一个文件中当浏览 applet时通过一从http的传输将它们一并下载到客户端节省多次下载多个小文件所浪费 的协议建立时间客户程序 在下载了applet的jar文件后就可以运行applet而无需再继续下载其他文件了Javakey 在生成数字签名时要求有关的类都打包在一个jar文件中它生成的数字签名也会自动添 加到这个jar文件中去 使用了jar文件后html中的applet标记略有不同比普通的多出了一个archive项例如
archive=jars/animatorjarjars/supportjar width= height=> jar是命令行工具常用的形式有 jar cf myjarfile *class将当前目录的所有class文件加到文件myjarfile中去 jar cvf myjarfile mydir将mydir里面所有文件加到文件myfile中去 jar工具的详细使用方法在JDK的文档有介绍 用javakey创建数字签名 javakey包括非常丰富的命令和参数能够为用户创建密钥对和证书详细的说明可以在 JDK的文档中找到简单来说用javakey创建运行带数字签名的jar文件主要包括下列步 骤 创建signer并设置为信任的格式为 javakey cs jiewen true 如果创建时没有指定true参数新建的signer将是不信任的可以用 javakey t jiewen true 创建公钥/私钥对由于SUN本身提供对DSA算法的实现所以一般都创建DSA的密钥对
javakey gk mysigner DSA 表示密钥长度为位 创建signer的证书创建证书时需要编辑一个说明文件说明证书的内容创建证书的 命令行格式为 javakey gc 说明文件 说明文件的主要内容为 issuername=jiewen #签发人名字如果没有则指定自己的名字 #issuercert= #如果签发人不是自己则要指定这项 subjectname=jiewen #拥有人的名字 subjectrealname=Zheng Jiewen unit=Nc =Scut untry=China #以上为拥有人的详细资料 startdate= Aug enddate= Aug #有效期 serialnumber= #序列号 outfile=certcer #输出文件名称 对JAR文件进行数字签名需要编辑一个说明文件来说明签名操作的细节命令行为
javakey gs 说明文件 jar文件 说明文件的主要内容为 signer=jiewen #指定签名人 cert= #指定用签名人的哪个证书 chain= #必须指定但没有意义 signaturefile=jiewen #签名存储在哪个文件里面 outfile=outjar #输出的jar文件的文件名 在客户端创建signer并信任之 javakey c jiewen true 在客户端安装signer的证书命令行为 javakey ic jiewen jiewencer jiewen为signer的名字jiewencer为存放证书的文件 完成上述操作后客户端的appletviewer就能够以信任方式来运行签名了的applet了这时 applet获得的权限和本地的application是一致的 安装和配置Java plugin 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 = 厖就是当 前的home目录了 知道了home目录后就要把包含有信任信息和签发人证书的文件拷贝到这个目录中去如果 用户有jdk的话可以用jdk的javakey工具按照前面的说明来设置信任和安装证书然后 在jdk的安装目录(如果使用windows)或者用户的home目录(如果使用unix)找到一个名 字为identitydbobj的 文件将这个文件拷贝到java plugin的home目录中设置的信任就生效了如果用户没 有jdk可以下载安装jdk来创建这个文件或者可以从别人处拷贝这个identitydbobj文 件并安装到自己的java plugin的home目录中 另外如果是在局域网内也可以在浏览器内设置安全级别将Applet所在的主机设成可信 任的站点这样就可以设置Applet的安全级了IE是可以的别的没试过 |