Java 1.8 Applet在IE11中遇安全异常,当前能否自签名JAR包?
关于Java 1.8下Applet自签名及安全异常的解决方案
嘿,我来帮你搞定这个问题!首先明确说:完全可以对JAR包进行自签名,你遇到的System.getProperty安全异常,本质是Java 1.8对Applet的安全沙箱机制做了更严格的限制,而自签名正是解决这类权限问题的关键手段之一。
下面一步步给你讲怎么做,以及需要注意的细节:
1. 生成自签名证书
用JDK自带的keytool工具生成证书,命令如下:
keytool -genkey -alias my_applet_alias -keyalg RSA -keystore my_keystore.jks -validity 3650
-alias:给证书起个别名,方便后续引用-keyalg RSA:指定加密算法,RSA是目前推荐的安全算法-validity 3650:设置证书有效期,这里设了10年,避免频繁续签
执行命令后会提示你输入密钥库密码、个人信息等,按提示填写即可。
2. 用证书签名你的Applet JAR包
接下来用jarsigner工具给JAR签名:
jarsigner -keystore my_keystore.jks your_applet.jar my_applet_alias
这里替换your_applet.jar为你实际的Applet包文件名,my_applet_alias要和上面生成证书时的别名一致。
签名完成后,可以用jarsigner -verify your_applet.jar命令验证签名是否成功。
3. 解决System.getProperty的安全异常
即使自签名后,Java 1.8的Applet默认还是会受到权限限制,调用System.getProperty这类操作需要明确授权:
- 如果用
appletviewer测试,你可以创建一个自定义安全策略文件(比如applet_policy.policy),内容如下:
grant codeBase "file:/C:/path/to/your/applet/your_applet.jar" { permission java.util.PropertyPermission "*", "read"; };
然后运行appletviewer时指定这个策略文件:
appletviewer -J-Djava.security.policy=applet_policy.policy your_applet.html
- 如果要在浏览器(比如IE11)中运行,你需要在Java控制面板里把你的JAR所在的目录添加到“例外站点列表”,或者用户在第一次运行时手动信任这个自签名的Applet(会弹出安全警告,需要选择“运行”)。
额外注意事项
- Java 1.8是Oracle官方支持Applet的最后几个版本之一,Java 9及以后就逐步移除了Applet相关API,所以你在1.8环境下开发是没问题的,但要注意避免使用已废弃的Applet API。
- 自签名的Applet在现代浏览器中会触发更严格的安全提示,用户需要手动确认信任才能运行,这和Java 1.6时代的宽松机制不同,提前和客户说明这一点。
- 确保你的Applet代码没有依赖Java 1.6特有的API,升级到1.8时可能需要调整一些兼容性问题,比如替换某些已被标记为废弃的方法。
内容的提问来源于stack exchange,提问作者UnixNerd
相关产品推荐
相关产品推荐

