我刚刚将JRE升级到7u45,我的applet在启动时收到一条警告信息,说“ 此应用程序将在未来的Java安全更新中被阻止,因为JAR文件清单不包含Permissions属性。“然后我将以下两个属性添加到我的applet Jar文件的清单中(自签名):
Permissions: all-permissions
Codebase: *
然而,警告信息并未消失。我怀疑我错过了其他一些东西,但经过数小时的研究后却无法找到它们。其他人都知道解决方案吗?
更新
使用有效证书签名的受信任小程序也无法运行。黄色警告消息未显示,但显示另一个错误对话框,说明安全设置阻止了小程序,而更改安全级别或Java控制面板中的其他内容无效。
答案 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再次启动:
答案 5 :(得分:0)
来自“Java平台组,产品管理博客”中的New security requirements for RIAs in 7u51 (January 2014):
截至7u51(2014年1月14日),您的RIA必须更新。 [...]
RIA必须包含两件事:
- 来自受信任机构的代码签名。 [...]
醇>
所以看来使用自签名证书就是问题所在。
我认为很明显,自签名证书并不是最终用户的介绍。
答案 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之前的安全弹出窗口将被删除。
不同之处在于现在(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,现在可以访问该程序。