web-dev-qa-db-ja.com

Javaアプレットのセキュリティ警告「JARファイルマニフェストにPermissions属性が含まれていません」とはどういう意味ですか?

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が更新されるため、セキュリティ警告 changed であることです。

JARファイルマニフェストにPermissions属性が含まれていないため、このアプリケーションは将来的にJavaセキュリティアップデートでブロックされます。詳細については、パブリッシャーにお問い合わせください。

どういう意味ですか?どうすれば修正できますか?証明書を購入する必要がありますか?マニフェスト(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=
23
koalabruder

証明書を購入する必要はなく、マニフェストファイルを修正するだけです。

次の行を追加します。

permissions: all-permissions

または、アクセスを制限する必要がある場合は、次の行:

permissions: sandbox
8
jzd

私は同じ問題に遭遇し、マニフェストを変更しても修正されませんでした。

最後に、独自のマニフェストを持つ独自のjarに入っているライブラリを参照していることがわかりました。アクセス許可とコードベースのないjarファイルのコピーを使用していました。

したがって、JREシステムライブラリ以外のライブラリを参照する場合は、jarファイルのマニフェストを確認します(たとえば、7Zipで開くことによって)。属性が含まれていない場合、次のことができます。

  • 製造元に新しいバージョンがあるかどうかを確認してください。彼は今までに問題に気付いていたかもしれません。
  • Jarファイルを解凍し、マニフェストを編集して再度jarするか、または
  • ライブラリを独自のjarとマージします。

最後の2つについては、ライブラリが公開されているライセンスを確認してください。たぶん、あなたはこの方法で製品を操作することを許可されていません。

2
Thomas Heckmann

Netbeansでは、ビルド中にマニフェストファイルが生成されることに注意しました。マニフェストの生成を担当するテンプレート内にマニフェスト属性を含めるために、この問題を修正するためにやったことを簡単に説明しました。

これを行うには、次の手順を実行します。

1-任意のエディターでこのファイルを開きます:(PATH)\ nbproject\jfx-impl.xml
(PATH):プロジェクトのパスです。

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-次にビルドすると、その警告は再び表示されません。

いくつかのメモ:

  • セキュリティに関連するマニフェスト属性のドキュメントを確認することを強くお勧めします@ http://docs.Oracle.com/javase/tutorial/deployment/jar/secman.html

  • コードベースでワイルドカード「*」値を使用しないでください。セキュリティのためにhttpではなくhttpsを使用することをお勧めします:-)私は開発専用に使用しています。

幸運を、'。

1
Maher Abuthraa

既存のアプレット(ユーザースマートカードとインターフェイスするコンポーネントであるため、正常に動作するには「強力な」証明書で署名する必要があります)の署名を更新しているときにこの警告に遭遇しました。

「codebase:xyz.com」などのコードベース属性も追加すると、実際には警告が消えます(この場合、元の警告テキストは、コードベースではなく「Permission」属性に関連する問題を参照していました。 。)。

それはおそらくjreのバグでしょうか?

1
user1430808