23

我有一个需要访问客户端本地文件系统的 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.MF)吗?什么是权限属性?

更新:这是我的 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

4 回答 4

8

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

添加这一行:

permissions: all-permissions

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

permissions: sandbox
于 2013-10-24T11:20:49.597 回答
2

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

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

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

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

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

于 2013-12-25T14:46:52.337 回答
1

在 Netbeans 中,我注意到清单文件是在构建期间生成的 ..所以简而言之,我为解决此问题所做的工作是将清单属性包含在负责生成清单的模板中。

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

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

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

                // 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-然后构建,您将不会再次看到该警告。

一些注意事项:

祝你好运,'。

于 2013-11-06T09:41:35.343 回答
1

我在更新预先存在的小程序(与用户智能卡接口的组件,因此需要使用“强”证书进行签名)上的签名时遇到此警告。

还添加代码库属性,例如:“代码库:xyz.com”实际上使警告消失(请注意,在这种情况下,原始警告文本指的是与“权限”属性相关的问题,而不是代码库之一。 .)。

这可能是jre中的错误?

于 2014-01-13T10:34:00.897 回答