使用JRE 7u45运行applet时出现“权限”警告

时间:2013-10-16 09:38:48

标签: java security applet manifest

我刚刚将JRE升级到7u45,我的applet在启动时收到一条警告信息,说“ 此应用程序将在未来的Java安全更新中被阻止,因为JAR文件清单不包含Permissions属性。“然后我将以下两个属性添加到我的applet Jar文件的清单中(自签名):

Permissions: all-permissions
Codebase: *

然而,警告信息并未消失。我怀疑我错过了其他一些东西,但经过数小时的研究后却无法找到它们。其他人都知道解决方案吗?

更新

使用有效证书签名的受信任小程序也无法运行。黄色警告消息未显示,但显示另一个错误对话框,说明安全设置阻止了小程序,而更改安全级别或Java控制面板中的其他内容无效。

12 个答案:

答案 0 :(得分:6)

我有同样的问题。 我使用显式代码库测试它,但警告“缺少权限清单属性”它继续出现。

还尝试将权限更改为“sandbox”,但仍显示该消息,但applet没有执行某些功能的权限。

编辑:

最后我找到了解决方案: MANIFEST.MF

Manifest-Version: 1.0
Codebase: *
Permissions: all-permissions
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *
Application-Name: AppName
Created-By: AppCreator

我希望这对你有所帮助。

答案 1 :(得分:2)


   我也遇到了这个问题,我在我的应用程序中解决了这个问题,只需将证书添加为java控制中心下的“安全站点”。

错误消息(“应用程序将被阻止...权限属性”)是如此误导,它更像是一般错误消息,与jar中真正存在的Permissions属性无关。对我来说这是一个错误,希望java会在下一个版本中修复它。

删除此错误消息的确切步骤:
1)javaws -viewer
2)打开安全选项卡
3)Clik on“管理证书”
4)选择证书类型为“安全站点”
5)添加申请证书。

答案 2 :(得分:2)

在编辑清单(请参阅如何使用maven配置清单)以及所有这些java配置后花了一些时间,我发现它是如何工作的:

要使用java 1.7+授予 allPermissions ,您需要编辑 java.policy 文件。

使用policytool执行此操作。在提示命令行:

policytool

请参阅Oracle教程: http://docs.oracle.com/javase/tutorial/security/tour1/wstep2.html

打开您的浏览器vm正在执行的正确政策文件。对我而言:

C:\ Program Files(x86)\ Java \ jre7 \ lib \ security \ java.policy

应该加载一些CodeBase列表。点击它进行编辑或:

添加条目

对于代码运行的每个位置,将 CodBase 留空,但是如果需要,可以输入 localhost 或stite,而非 signedBy 为空签名的罐子/小程序。  单击添加权限,然后选择 AllPermissions
我有CodeBase <ALL>并且java.security.AllPermission

然后保存! java.policy并且应该获取成功消息。

完成后,您可以运行未签名的小程序和访问磁盘文件。

答案 3 :(得分:1)

在Java控制面板中,将安全级别更改为“非常高”,这样会阻止小程序运行,因为它缺少必需的“权限”属性。运行你的应用程序,将抛出一个异常,告诉你哪个jar缺少该属性。

我的印象是将Permissions属性添加到applet的主jar就足够了,但我发现即使是一个辅助jar也会导致问题。我现在将Permissions属性添加到我的所有jar中。

希望这有助于某人。

答案 4 :(得分:1)

将基本网址添加到Java控制面板的安全选项卡中的安全网站列表(检查除外),这使我的vpn再次启动:

Screenshot of the dialog (it's in German, sorry!)

答案 5 :(得分:0)

来自“Java平台组,产品管理博客”中的New security requirements for RIAs in 7u51 (January 2014)

  

截至7u51(2014年1月14日),您的RIA必须更新。 [...]

     

RIA必须包含两件事:

     
      
  1. 来自受信任机构的代码签名。 [...]
  2.   

所以看来使用自签名证书就是问题所在。

我认为很明显,自签名证书并不是最终用户的介绍。

答案 6 :(得分:0)

我不知道我的原始答案(已删除)是错误的。不应在本地applet中忽略清单中的Permissions属性,因此,这是一个错误。

7u45发行说明中描述了类似的已知问题。这必须是相关的。

关于原始问题:代码库:*?

Codebase: localhost

适用于http://localhost,它与file://localhost/C:/folder不矛盾,localhost(在Windows上)是正确的JNLP代码库语法。清单中的Codebase属性允许多个条目。添加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 肯定不会产生任何不利影响。

<强>更新

.java.policy

我相信在7u45下离线运行applet会产生问题,无论你把它放在清单中,这都是非常不幸的。

据我所知,将Security > Manage Certificates > User > Signer CA.文件添加到本地目录的旧方法也毫无意义,这也是不幸的。

更多信息:

(关于错误?)

如果applet已签名,您可以选择在Java控制面板中导入公共证书(.csr,.p12,.cer):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 确保过去导入证书:A)小程序出版商众所周知。 B)在浏览器中运行applet之前的安全弹出窗口将被删除。

  • Web Start应用程序,同上。

不同之处在于现在(7u45):A)出版商是已知的。 B)您收到“...清单不包含权限属性”警告。

  • 仅限本地小程序。

警告之后,根据我的经验,applet将无法运行。

Signer CA

解决方法是从{{1}}商店删除证书,但绝不是解决方法。在删除证书时(绝望,作为最后的手段),签名的本地applet运行如下:A)UNKNOWN Publisher等.B)你得到一个安全对话框,以及缺少的Permissions属性警告。

  • 以上都不适用于在线小程序。

随意发表评论。

答案 7 :(得分:0)

在1.7.0_u45中,您可能需要同时设置Permissions和Caller-Allowable-Codebase属性:

Caller-Allowable-Codebase: * localhost 127.0.0.1
Permissions: all-permissions

请参阅解释安全弹出窗口的this diagram

我正在设置我的清单属性:

Application-Name: MyAppName
Implementation-version: %VERSION% 
Permissions: all-permissions
Caller-Allowable-Codebase: * localhost 127.0.0.1
Application-Library-Allowable-Codebase: *

答案 8 :(得分:0)

如果您正在使用基于版本的协议的webstart,则似乎存在此错误,导致Permissions属性警告不应该。一旦我们从jnlp中删除了版本属性,并从jar文件名中删除了版本字符串,Permissions属性警告便消失了。

修改:我发现此论坛帖子讨论了此事:https://forums.oracle.com/thread/2594060

答案 9 :(得分:0)

运行java uninstall applet以删除旧版本的java。 http://java.com/en/download/uninstallapplet.jsp

答案 10 :(得分:0)

尝试打开Dell iDRAC虚拟控制台时出现同样的错误。 如果您想以适当的方式摆脱警告,这无济于事。但是,如果您只想运行应用程序,那么对我来说解决方案是打开 Java控制面板并在安全选项卡中将安全级别设置为< EM>中的

之后我可以在接受警告后运行应用程序。

答案 11 :(得分:-2)

我将Java Security设置为Medium,现在可以访问该程序。