准备工作当然是写一个Applet其中涉及到对本地文件的读或写操作用于测试目的可以先予以执行想必应该是会抛出javasecurityAccessControlException的 下面实现签名(代码本身无须任何更改) 注下面所使用的keytool或jarsigner命令只存在与Java中中为javakey且二者的安全模型有很大的差异故务必首先确定你所使用SDK的版本 ()使用keytool命令建立自己的密钥库并生成X自签名证书 下列的命令很长时间都不使用了具体参数什么的都忘完了故只给出大概的参数至于具体用法请参阅文档 keytool genkey alias xiewuhen(这里似乎应该是密钥库的项目) 下面按照提示一步步进行下去即可 ()把Applet类文件打包成jar ()利用jarsigner签名jar文件 jarsigner appletjar xiewuhen(这个appletjar是你要签名的jar文件xiewuhen是你前面在密钥库中生成的项目) ()检查jar文件在metainf目录下应该会出现两个新文件xiwehenSFxiwuhenDSA注意xiewuhen这个密钥项目只是事例具体是什么依赖你最初使用keytool所生成的项目其中SF文件是签名文件是一个ASCII文件保 存了签名过程中使用的摘要算法DSA文件是一个二进制文件保存了签名和数字证书最后一点就是文件扩展名具体是DSA还是RSA取决你使用的签名算 法默认是DSA可以在keytool参数中指定RSA算法 ()若你是在单机且只有一个密钥库的机器上测试下一个步骤可以省略因为这牵涉到证书的导入导出的问题由于你签名方和验证方共用同一个密钥库那证书就无须导来导去了但为了模拟真正的环境所以还是建议在多机上测试或建立多个密钥库 ()使用keytool export file alias等一系列参数将证书导出保存成crt格式可以在流览器中配置该证书但我们暂不考虑这种情况再次使用keytool import file alias命令将证书导入验证方的密钥库注意alias指定的别名务必和生成时的一模一样 ()修改策略文件该文件位于主目录的/lib/security/中是javaseucrity文件至于你的Java主目录是什么可以查看javahome系统属性 ()如下修改策略 //指定的的密钥库路径type目前只能是JKS(Sun的默认实现)可以省略 keystore keystoreURLkeystoreType; grant signedBy xiwuhen codeBase 这里指定Applet的装入URL若是文件URL须在前面加上file: 注意这里务必不可省略否则Applet就会共享其他的策略了 { permission javaioFilePermission autoexecbatread; //上面的权限只是一个例子依据你的要求给出具体策略 }; 最后还有一点就是Applet可以有许多人顺序签名若是那样的话signedBy中的各个签名者之间是和的关系而不是或也就是说比如signedBy ab那必须两人都签了名名才行只有其一是不予通过的 关于证书的问题由于这里我们使用的是自签名证书所以只能用于测试目的在真正的商务活动中是不会有人信任这种证书的(想必你也不会信任来路不明的证 书)要想真正用于实际须向证书机构(CA)申请并购买数字证书类似机构大的主要有VerisignThawte等 |