23

クライアントのローカル ファイル システムにアクセスする必要がある 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 更新の 1 つが原因でセキュリティ警告が変更されたことです。

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=
4

4 に答える 4

8

証明書を購入する必要はありません。マニフェスト ファイルを修正するだけです。

次の行を追加します。

permissions: all-permissions

または、制限されたアクセスのみが必要な場合は、次の行:

permissions: sandbox
于 2013-10-24T11:20:49.597 に答える
2

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

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

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

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

最後の 2 つについては、ライブラリが公開されているライセンスを確認してください。このように製品を操作することは許可されていない可能性があります。

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

いくつかのメモ:

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

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

幸運を、'。

于 2013-11-06T09:41:35.343 に答える