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

时间:2013-10-24 11:19:13

标签: java jar applet manifest security-warning

我有一个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

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

我的问题是,安全警告changed,因为最后一次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=

4 个答案:

答案 0 :(得分:8)

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

添加以下行:

permissions: all-permissions

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

permissions: sandbox

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:1)

在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-然后建立,你不会再看到那个警告。

一些注意事项:

祝你好运,'。

答案 3 :(得分:1)

我在更新预先存在的小程序(用于连接用户智能卡的组件)上签名时遇到此警告,因此要正常工作,需要使用"强大的"证书进行签名)。

还添加了codebase属性,例如:" Codebase:xyz.com"实际上警告消失了(注意原始警告文本是引用的,如本例所示,是与" Permission"属性相关的问题,而不是代码库...)。

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