使用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. 来自受信任机构的代码签名。 […]

因此,使用自签名证书似乎是问题所在。

我认为很明显,自签名证书作为最终用户的介绍并没有多大用处。

在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安全性设置为中,现在可以访问该程序。