nbsp; } catch (IOException e) {
}finally{
try{
fr.close();
}catch (IOException e){
}
}
}catch (IOException e) {
}
}
}
1.将Friend和Stranger分别导出为jar文件,放在指定目录(这里放在”E:\java\security”目录下)以待不同的机构 进行签名,Friend所在包假定为比较有信用的机构”friend”进行签名,而Stranger所在包假定为一个不受信任的机构”stranger” 进行签名。
(1).调用命令 jar cvf xxx.jar <_ClassPath> 进行打包
(注意打包后,若没有把jar包放在单独的目录下,需要删除原java文件编译产生的class文件,以免程序运行直接加载目录下class文件而非包内的class文件)
这里分别调用
jar cvf friend.jar com/ice/security/friend/*.class 将friend包内的class文件打包
jar cvf stranger.jar com/ice/security/stranger/*.class 将friend包内的class文件打包
(2).使用keytool可以用来生成新的密钥对,并与一个别名关联,用密码加以保护存放在keystore文件中
使用keytool -genkey -alias friend -keypass 123456 -validity 10000 -keystore mykey 命令:
该密钥的别名是friend,别名密码是123456(至少6位),有效期是10000天,存放在一个mykey的keystore文件中,keystore密码为myfriendkey
类似地,生成一个别名stranger的密钥对
为了方便起见,两个不同的签名者stranger和friend的密钥均存放在mykey中,mykey的访问密码是myfriendkey,密钥的访问密码都是123456
可以看到在目录下生成了一个mykey文件
(3).使用jarsigner -keystore -storepass -keypass 命令进行签名
这里:
jarsigner -keystore mykey -storepass myfriendkey -keypass 123456 friend.jar friend
jarsigner -keystore mykey -storepass myfriendkey -keypass 123456 stranger.jar stranger
使用friend密钥对friend.jar进行签名,使用stranger密钥对stranger.jar进行签名
(4).最后可以使用
keytool -export -alias -storepass -file -keystore
这里分别用:
keytool -export -alias friend -storepass myfriendkey -file friend.cer -keystore mykey
keytool -export -alias stranger -storepass myfriendkey -file stranger.cer -keystore mykey
导出friend和stranger的发行证书
2.编写自己的策略文件,放在当前目录下
//mypolicy.txt
keystore "mykey";
grant signedBy "friend"{
permission java.io.FilePermission "friend.txt","read";
permission java.io.FilePermission "stranger.txt","read";
};
grant signedBy "stranger"{
permission java.io.FilePermission "stranger.txt","read";
};
grant codeBase "file:${com.ice.home}/com*"{
permission java.io.FilePermission "friend.txt","read";
permission java.io.FilePermission "stranger.txt","read";
};
这里friend签名的类和${com.ice.home}.com(后面设置 为”e:\java\security\com”,存放着Doer接口的class文件)可以读取”friend.txt” 和”stranger.txt”,而stranger签名的类只能读取”stranger.txt”
(这里为了方便,直接使用myke