Java Applet安全警告“JAR文件清单不包含Permissions属性”是什么意思?

我有一个Java Applet,需要访问客户端的本地文件系统。 我为自己创建了一个简单的证书(它未经Verisign,Commodo认证,……)。 我使用以下模板签署了jar:

del \Users\koalabruder\.keystore "C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -genkey -alias %1 -keypass kp -dname "cn=inin" -storepass ab987c "C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe" -storepass abc -keypass kp %2 %1 "C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -export -storepass abc -alias %1 -file %3 

我有“没有签名证书”的简单安全警告已存在多年,并不是我的问题。

我的问题是,安全警告因最后一次Java更新而改变:

此应用程序将在未来的Java安全更新中被阻止,因为JAR文件清单不包含Permissions属性。 请联系发布者以获取更多信息。

这是什么意思? 我该如何解决? 我必须购买证书吗? 我是否必须修复Manifest(MANIFEST.MF)? 什么是Permission属性?

更新:这是我的jar文件中的清单

 Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.4 Application-Name: inin Permissions: all-permissions Created-By: 1.7.0_45-b18 (Oracle Corporation) Name: net/inin/transfer/ul/UlPanel.class SHA-256-Digest: asdfasddddddddddddddddddddddddddddddddd= 

您无需购买证书,只需修复清单文件即可。

添加此行:

 permissions: all-permissions 

如果您只需要有限的访问权限,请使用此行:

 permissions: sandbox 

我遇到了同样的问题,改变我的清单没有解决它。

最后我发现,我引用了一个带有自己的清单的自带jar的库。 我正在使用那个没有Permissions和Codebase的jar文件的副本。

因此,如果您引用除JRE系统库之外的任何库,请检查jar文件中的清单(例如,使用7zip打开它)。 如果它不包含属性,您可以:

  • 检查,如果制造商有新版本。 他现在可能已经注意到了这个问题。
  • 解压缩jar文件,编辑清单并再次将其jar,或者
  • 将库与您自己的jar合并。

对于最后两个,请检查发布库的许可证。 也许你不允许以这种方式操纵产品。

在Netbeans中,我注意到清单文件是在构建期间生成的。所以我简要介绍了解决此问题的方法,将我的清单属性包含在负责生成清单的模板中。

为此,请按照下列步骤操作:

1-使用任何编辑器打开此文件:(PATH)\ nbproject \ jfx-impl.xml
(路径):是项目的路径。

2-搜索:“// manifest”。 我的看起来像:

  // manifest var man = jar.createManifest(); var a1val = project.getProperty("application.vendor"); var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); a1.setName("Implementation-Vendor"); a1.setValue(a1val); man.addConfiguredAttribute(a1); var a2val = project.getProperty("application.title"); var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); a2.setName("Implementation-Title"); a2.setValue(a2val); man.addConfiguredAttribute(a2); var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); a3.setName("Implementation-Version"); a3.setValue("1.0"); man.addConfiguredAttribute(a3); //******insert your Attributes code here******* jar.perform(); 

3-在“// * 在此处插入您的属性 ** ”下,您可以插入自己的清单属性代码,在我的情况下它足以包含代码库和权限..您也可以使用我的代码:

  ... //******insert your Attributes here******* var a50 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); a50.setName("permissions"); a50.setValue("all-permissions"); man.addConfiguredAttribute(a50); var a51 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); a51.setName("codebase"); a51.setValue("*"); man.addConfiguredAttribute(a51); ... 

4-然后建立,你不会再看到这个警告。

一些说明:

祝好运,’。

我在更新预先存在的applet(一个连接用户智能卡的组件)上签名时遇到了此警告,因此要正常工作需要使用“强”证书进行签名。

添加codebase属性,例如:“Codebase:xyz.com”实际上使警告消失(请注意原始警告文本正在引用,如本例所示,与“权限”属性相关的问题而不是代码库属性。 )。

这可能是jre中的一个错误?