簡體   English   中英

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

[英]What does the Java Applet security warning “JAR file manifest does not contain the Permissions attribute”mean?

我有一個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中的一個錯誤?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM