Java小程序安全警告是什么;JAR文件清单不包含权限属性";什么意思?

Java小程序安全警告是什么;JAR文件清单不包含权限属性";什么意思?,java,jar,applet,manifest,security-warning,Java,Jar,Applet,Manifest,Security Warning,我有一个Java小程序,需要访问客户端的本地文件系统。我已经为自己创建了一个简单的证书(它未经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小程序,需要访问客户端的本地文件系统。我已经为自己创建了一个简单的证书(它未经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=

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

添加此行:

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

permissions: sandbox

在Netbeans中,我注意到清单文件是在构建过程中生成的。因此,请简要说明我为解决此问题所做的工作,以将清单属性包含在负责生成清单的模板中

要执行此操作,请执行以下步骤:

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

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-然后构建,你就不会再看到警告了

一些注意事项:

  • 我强烈建议检查与安全性相关的清单属性文档@

  • 不要在代码库中使用通配符“*”值,为了安全起见,最好使用https而不是http:-)我使用它只是为了开发


祝你好运,”。

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

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

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

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

对于最后两种情况,请检查用于发布库的许可证。可能您不允许以这种方式操作产品。

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

还添加了codebase属性,例如:“codebase:xyz.com”实际上会使警告消失(请注意,在本例中,原始警告文本指的是与“权限”属性相关的问题,而不是与codebase属性相关的问题…)


这可能是jre中的一个bug?

此处相同,权限设置正确,JNLP本身已加载,应用程序启动,当应用程序访问internet上的https页面时,我们会收到消息!?我也只在https下得到警告,你找到解决方案了吗?我已经在问题中插入了清单。它不工作。这看起来是正确的,您确定在尝试运行小程序时正在使用清单吗。可能需要清除浏览器中的缓存。等等,您是说清单加载失败还是消息仍然存在。如果你说该消息仍然存在,那么还有其他事情在发生,我仍然倾向于说权限部分很好,但是它没有在你认为的地方得到更新。你是什么意思?如果我在jar上签名,清单就会被操纵。因此,我认为清单已加载。如果您添加了权限属性,但仍然出现权限属性不存在的错误,则可能是您没有真正添加它,或者它正在缓存到某个位置。