java代码签名简单示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java代码签名和策略文件使用的一个简单示例:
1.首先创建一个签名,过程如下:
使用的命令为:keytool –genkey –alias friend –keypass friend4life –validity 10000 –keystore ijvmkeys
其中,-alias friend 表示创建的密钥对的别名为friend
-keypass friend4life表示创建的密钥对的密码为friend4life
-validity 10000 表示此密钥对的生存周期为10000天
-keystore ijvmkeys 表示存储密钥对的文件为当前目录下的ijvmkeys,如果没有此文件就创建一个。
创建的过程中要求输入密码,如果是第一次创建文件就输入自己的密码,如果要向一个密钥文件中添加新的密钥,就要输入已有的签名,本例密码为ijvm2ed
2.创建一个.jar文件
本文创建一个读取文件的类,代码如下:
arg[0]为所要读取文件的文件名,此java文件名位policyTest.java
利用eclipse中的菜单命令Export方式将其打包为文件policyTest.jar,要生成可执行的jar文件。
3.进行签名
将第二步创建的policyTest.jar文件和第一步创建的ijvmkeys放在一个目录下。在进行签名前,解压policyTest.jar,打开其中的META-INF文件夹,可以看到:里面只有一个名为MANIFEST.MF的文件。
现在对policyTest.jar进行代码签名,输入命令如下:
其中,
-keystore ijvmkeys 表示保存密钥的文件为当前目录下地ijvmkeys
-storepass ijvm2ed 表示保存密钥的文件的密码为ijvm2ed
-keypass friend4life表示密钥对的密码为friend4life
policyTest.jar 为待签名的jar包为当前目录下的policyTest.jar
friend 表示用于签名的密钥名为friend
执行了本命令后,再次解压policyTest.jar,打开META-INF文件夹,可以发现多了两个文件:
FRIEND.DSA和FRIEND.SF,说明jar包已经经过了签名,如图:、
4.创建策略文件
策略文件用来说明被签名程序的权限,java默认的策略文件包括系统策略文件和用户自定义的策略文件,指定这两个文件默认位置的文件为java.security,它存放在系统属性java.home 目录下的lib/security下,可以用下面的java语句得到系统变量java.home:
System.getProperties().getProperty("java.home");
然后根据这个值找到java.security文件。
java.security文件中指定了系统策略文件和用户自定义策略文件的默认存储位置,如下:
反色的内容分别指定了指定了系统策略文件和用户自定义策略文件的默认存储位置。user.home可以用下面的java语句得到:
System.getProperties().getProperty("user.home");
也可以在其它地方创建自己的策略文件,本文在与policyTest.jar同一个目录下创建策略文件policyfile.txt,内容如下图所示:
第一句keystore “ijvmkeys”说明,密钥别名指向当前目录下存储名为“ijvmkeys”的文件中的证书。
下面的内容表示授予以friend签名的程序读取当前目录下的文件“question.txt”和“answer.txt”的权限。
5.运行policyTest.jar
直接使用java –jar policyTest.jar answer.txt,不管程序policyTest.jar是否被签名,都不会有什么影响,文件被读取,显示文件中的内容,如图:
使用命令,java –Djava.security.manager –Djava.security.policy=policyfile.txt –jar policyTest.jar answer.txt,当policyTest.jar未签名时,则会出现拒绝访问的错误,如下图所示:
当policyTest.jar已经经过friend签名时,则可以顺利读出,如图:
命令中,-Djava.security.policy=policyfile.txt 表示载入的策略文件。policyTest.jar为java的jar 包,answer.txt为命令行参数,在此程序中表示要读取的文件。