使用JRE 7u45运行applet时出现Permissions上的警告
我刚刚将JRE升级到7u45,我的applet在启动时收到一条警告消息,说“此应用程序将在未来的Java安全更新中被阻止,因为JAR文件清单不包含Permissions属性。” 然后我将以下两个属性添加到我的applet Jar文件的清单中(自签名):
Permissions: all-permissions Codebase: *
但是警告信息并没有消失。 我怀疑自己错过了其他一些东西,但经过数小时的研究后却无法找到它们。 其他人都知道解决方案吗?
更新
使用有效证书签名的受信任的applet也无法运行。 黄色警告消息未显示,但显示另一个错误对话框,说明安全设置阻止了小程序,而在Java控制面板中更改安全级别或其他内容则没有帮助。
我也有同样的问题。 我使用显式代码库测试它,但警告“缺少权限清单属性”它继续出现。
还尝试将权限更改为“沙盒”,消息仍然出现,但applet没有执行某些function的权限。
编辑:
最后我找到了解决方案:manifest.mf
Manifest-Version: 1.0 Codebase: * Permissions: all-permissions Application-Library-Allowable-Codebase: * Caller-Allowable-Codebase: * Application-Name: AppName Created-By: AppCreator
我希望这对你有帮助。
我也遇到了这个问题,我在我的应用程序中解决了这个问题,只需将证书添加为java控制中心下的“安全站点”即可。
错误消息(“应用程序将被阻止…权限属性”)是如此误导,它更像是一般错误消息,并且与实际存在于jar中的Permissions属性无关。 这对我来说是一个bug,希望java会在下一个版本中修复它。
删除此错误消息的确切步骤:
1)javaws -viewer
2)打开“安全”选项卡
3)Clik on“管理证书”
4)选择证书类型为“安全站点”
5)添加应用程序证书。
在花了一些时间打破编辑清单(请参阅如何使用maven配置清单)以及所有这些java配置后,我发现它是如何工作的:
要使用java 1.7+授予allPermissions ,您需要编辑java.policy文件。
使用policytool来做到这一点。 在提示命令行:
policytool
请参阅Oracle教程: http : //docs.oracle.com/javase/tutorial/security/tour1/wstep2.html
打开正在执行浏览器虚拟机的正确策略文件。 对我而言:
C:\ Program Files(x86)\ Java \ jre7 \ lib \ security \ java.policy
应该加载一些CodeBase列表。 点击它进行编辑或:
添加条目
对于运行代码的每个位置,将CodBase保留为空白,但是如果需要,可以将localhost或stite放入,对于非签名的jar / applet,可以将signedBy为空。 单击“ 添加权限” ,然后选择“ AllPermissions”
我有CodeBase
和java.security.AllPermission
然后保存 ! java.policy并且应该获得成功消息。
完成后,您可以运行未签名的小程序和访问磁盘文件。
在Java控制面板中,将安全级别更改为“非常高”,这样会阻止小程序运行,因为它缺少必需的“权限”属性。 运行你的应用程序,将抛出一个exception,告诉你哪个jar缺少属性。
我的印象是,将Permissions属性添加到applet的主jar就足够了,但我发现即使是一个辅助jar也会导致问题。 我现在将Permissions属性添加到我的所有jar中。
希望这有助于某人。
将基本URL添加到Java控制面板的安全选项卡中的安全站点列表(检查除外),这使我的vpn再次启动:
根据7月51日(2014年1月)在“Java平台组,产品管理博客”中对RIA的新安全要求 :
截至7u51(2014年1月14日),您的RIA必须更新。 […]
RIA必须包含两件事:
- 来自受信任机构的代码签名。 […]
因此,使用自签名证书似乎是问题所在。
我认为很明显,自签名证书作为最终用户的介绍并没有多大用处。
在1.7.0_u45中,您可能需要同时设置Permissions和Caller-Allowable-Codebase属性:
Caller-Allowable-Codebase: * localhost 127.0.0.1 Permissions: all-permissions
请参阅此图解释安全弹出窗口
我正在设置我的清单属性,如下所示:
Application-Name: MyAppName Implementation-version: %VERSION% Permissions: all-permissions Caller-Allowable-Codebase: * localhost 127.0.0.1 Application-Library-Allowable-Codebase: *
我不知道我的原始答案(删除)是错误的。 不应在本地applet中忽略清单中的Permissions属性,因此,这是一个错误。
7u45发行说明中描述了类似的已知问题。 这必须是相关的。
至于原来的问题:Codebase:*?
Codebase: localhost
它适用于http://localhost
,它不与file://localhost/C:/folder
相矛盾,它在Windows上是正确的JNLP代码库语法。 清单中的Codebase属性允许多个条目。 添加localhost
肯定不会产生任何负面影响。
更新:
Manifest-Version: 1.0 Implementation-Title: MyApplet Implementation-Version: applet build Built-By: bnicer Application-Name: Slide Show Created-By: 1.7.0_45-b18 (Oracle Corporation) Caller-Allowable-Codebase: * Implementation-Vendor: MyFirm Ant-Version: Apache Ant 1.9.2 Trusted-Library: true Application-Library-Allowable-Codebase: * Built-On: 8 November, 2013 @ 13:40:10 GMT Trusted-Only: true Permissions: all-permissions Main-Class: jtss Codebase: www.mydomain.co.uk localhost 127.0.0.1 192.168.2.2
我相信在7u45下离线运行applet会产生问题,无论你把它放在清单中,这都是非常不幸的。
据我所知,将.java.policy
文件添加到本地目录的旧方法也毫无意义,这也是不幸的。
更多信息:
(关于bug?)
如果小程序已签名,则可以选择在Java控制面板中导入公共证书(.csr,.p12,.cer): Security > Manage Certificates > User > Signer CA.
确保过去导入证书:A)applet发布者已知。 B)在浏览器中运行applet之前的安全弹出窗口将被删除。
- Web Start应用程序,同上。
不同之处在于现在(7u45):A)出版商是已知的。 B)您收到“…清单不包含权限属性”警告。
- 仅适用于本地小程序。
警告之后,根据我的经验,applet将无法运行。
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at sun.plugin2.applet.Plugin2ClassLoader.defineClassHelper(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.access$100(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) ... 14 more Caused by: java.lang.NullPointerException at sun.plugin2.applet.Plugin2ClassLoader.loadAllowedCodebases(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.getPermissions(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader.getPermissions(Unknown Source) at java.security.SecureClassLoader.getProtectionDomain(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) ... 18 more
解决方法是从Signer CA
存储中删除证书,但绝不是解决方法。 在删除证书时(绝望,作为最后的手段),签名的本地applet运行如下:A)UNKNOWN Publisher等.B)你得到一个安全对话框,以及缺少的Permissions属性警告。
- 以上都不适用于在线applet。
随意评论。
如果您正在使用基于版本的协议的webstart,则似乎存在此错误,导致Permissions属性警告不应该。 一旦我们从jnlp中删除了版本属性,并从jar文件名中删除了版本字符串,Permissions属性警告便消失了。
编辑:我发现这个讨论此问题的论坛post: https : //forums.oracle.com/thread/2594060 。
运行java uninstall applet以删除旧版本的java。 http://java.com/en/download/uninstallapplet.jsp
尝试打开Dell iDRAC虚拟控制台时出现同样的错误。 如果你想以适当的方式摆脱警告,这没有任何帮助。 但是,如果您只想运行应用程序,那么对我来说,解决方案是打开Java控制面板 ,在“ 安全”选项卡中将“ 安全级别”设置为“ 中” 。
之后,我可以在接受警告后运行应用程序。
我将我的Java安全性设置为中,现在可以访问该程序。