我搜索过很多链接,例如oracle和velocity review以及stackoverlow,但仍然没有成功。
重点很简单。 Jar使用以下方式签名:
keytool -genkey -alias signFiles -keystore compstore -keypass bca321 -dname "cn=test" -storepass abc123
jarsigner -keystore compstore -storepass abc123 -keypass bca321 -signedjar SignedJar.jar UnsignedJar.jar signFiles
它在本地机器上运行完美。但是当SignedJar.jar被用作applet的HTTP(S)时,即使用户接受证书(IE或FF或Chrome - 没有区别),它也会停止使用:
java.security.AccessControlException: access denied (javax.smartcardio.CardPermission Broadcom Corp Contacted SmartCard 0 connect)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at sun.security.smartcardio.TerminalImpl.connect(Unknown Source)
是的,它试图从插入终端的智能卡中读取,并在调用connect时获得异常。
是的,我也试过这种方法:
AccessController.doPrivileged(new PrivilegedAction() {
...
但没有运气。那捕获的地方在哪里?
提前致谢, 基里尔
答案 0 :(得分:0)
我今天遇到了这个问题,java 1.7.0_11,applet jars用自签名证书签名添加到可信证书列表中。当我删除我的策略文件中授予applet的代码库所有权限的部分时,它就消失了。
答案 1 :(得分:0)
创建公钥/私钥后,创建关联证书并使用证书签署哪个applet jar,您应该为JAR中的每个文件创建一个哈希,并使用私钥对其进行签名。必须将这些哈希,公钥和证书与JAR清单一起添加到JAR文件的META-INF目录中。
这是命令行:
$ jar -tf SignedApplet.jar
请参阅link