7

Java 1.7.0_21 を実行している Mac 10.7 を使用しています。署名された Java アプレット アプリケーションを実行しようとしていますが、アプリケーションの最後に「安全でない可能性のあるコンポーネントの実行をブロックしますか?」という混合モードのセキュリティ ポップアップが表示されます。私が使用しているすべての瓶は署名されています。

Java 6 を実行している Mac 10.6 で同じアプレット アプリケーションを実行できますが、混合モードの警告は表示されません。また、混合モードの警告が表示されることなく、Windows でアプリケーションを実行することもできます。

すべての jar が署名されているのに、このエラーが発生し続けるのはなぜですか?

混合モードの警告をグーグルで検索したところ、このリンクが見つかりました。

http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html#manifest

このリンクを読んだ後、私は少し混乱しています。このリンクによると、マニフェスト ファイル内に「Trusted-Only」または「Trusted-Library」属性を記載する必要があるようです。私は自分のマニフェスト ファイルを調べましたが、それらにはこれらの属性がありません。

すべてが署名されているにもかかわらず、なぜこのエラーが発生するのかを誰かが理解するのを手伝ってくれますか?

4

4 に答える 4

8

Java 7 のUpdate 21は強力なセキュリティ アップデートであり、いくつかの重大な変更が加えられています。

そのリリース ノートを確認する必要があります。2 つの段落と、署名済みの jar に関連する 2 つの既知の問題があります。

あなたの問題はこれにあります:

エリア: デプロイ/プラグイン

概要: アプリケーションを閉じる際のセキュリティ ポップアップ

JDK 7u21 以降、すべての権限で実行されている署名付きアプレット内のコードを呼び出す JavaScript コードは混合コードとして扱われ、署名付き JAR ファイルがTrusted-Library=true属性でタグ付けされていない場合は警告ダイアログが表示されます。パーミッションのあるコードとパーミッションのないコードの混在(doc link)を参照してください。

JavaScript 呼び出しに対するすべての権限で実行されている署名付きアプレットの場合、セキュリティ ダイアログ (混合コード警告付き) は表示されません。ただし、一部のシナリオでは混合コードの警告が表示されます。

良いニュース:回避策があります:

回避策として、アプレット jar がすべての権限で実行され、「Trusted-library:true」属性をマニフェスト エントリとして使用している場合、混合コードの警告は表示されません。

于 2013-04-18T00:51:18.660 に答える
2

最善の解決策は を使用するTrusted-Library=trueことですが、何らかの理由でこれが機能しない場合は、コンピュータが混合セキュリティ アプレットを処理する方法を変更することもできます。

http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/properties.html

ユーザーのワークステーションに次のファイルを作成します。 C:\Windows\Sun\Java\Deployment\deployment.properties

ファイルに次の行を追加します。 deployment.security.mixcode="HIDE_RUN"

これにより、Java はセキュリティ警告を非表示にし、コードが混在している場合は常にアプレットを実行するように指示されます。また、リリースノートには次のように書かれています。

JDK 7u21 以降、特権アプレット内のコードを呼び出す JavaScript コードは混合コードとして扱われ、署名された JAR ファイルが Trusted-Library 属性でタグ付けされていない場合、警告ダイアログが表示されます。

詳細については、特権コードとサンドボックス コードの混合に関するドキュメントを参照してください。

JDK 7u21 リリースでは、Rich Internet Applications (RIA) を実行する前にユーザーに許可を求めるプロンプトを表示することで、ユーザーはより多くの情報に基づいた決定を下すことができます。これらのアクセス許可ダイアログには、アプリケーションの署名に使用される証明書、アプリケーションの場所、およびアプリケーションが要求するアクセスのレベルに関する情報が含まれます。詳細については、RIA のユーザー承認を参照してください。

参考までに、JRE 6u19 アプレットに特権コンポーネントとサンドボックス コンポーネントの両方が含まれている場合、警告ダイアログが表示されます。

于 2013-04-18T15:08:50.613 に答える
2

JRE 1.7.0_21 以降、このセキュリティ警告を生成するアプレットも持っています。

これが私が学んだことです。別の署名付き jar への呼び出しを許可するかどうかをユーザーに尋ねたくない場合は、アプレット マニフェストに「Trusted-Only: true」を配置します。通話はセキュリティ警告なしでブロックされます。呼び出している jar に追加する「Trusted-Library: true」。これが jar のマニフェストにあり、jar が署名されている場合、アプレットがそれを呼び出したときにセキュリティ警告は表示されず、呼び出しはブロックされません。

私のアプレットは、swing-layout-1.0.4.jar を使用しています。この問題を解決するには、「Trusted-Library: true」を swing-layout-1.0.4.jar に追加する必要がありました。これは、JDK の jar.exe アプリケーションを使用して実行できるはずです。

jar vcmf swing-layout-1.0.4a.jar MyManifest.mf swing-layout-1.0.4.jar

MyManifest.mf は、「Trusted-Library: true」を含むテキスト ファイルです。: と true の間のスペースは重要であり、行末にキャリッジ リターンが必要です。

何らかの理由でこれを機能させることができなかったため、netbeans を使用してスイングレイアウトを再構築しました。swing-layout-1.0.4 のソースは、netbeans インストール (プラットフォームの下) の一部です。解凍してプロジェクトとして開きました。ファイルの下で、マニフェスト ファイルをマジック ラインを含むように変更し (マニフェスト ファイルの最後に : の後にスペースを入れ、空白行を入れることが重要です)、ビルドを実行します。その後、jar に署名し、セキュリティ警告はなくなりました。

これが役立つか、少なくとも正しい方向に向けられることを願っています

于 2013-04-19T14:08:45.723 に答える
1

返信ありがとうございます。小さなサンプルに Trusted-Library=true を追加してみましたが、うまくいくようです。そのため、すべての jar のマニフェスト ファイルを更新しようとしています。そして、私たちはantを使用しているので、次のことを行います

        <jar update="true" jarfile="${deploy.dir}/javaApp.jar">
            <manifest>
                <attribute name="Trusted-Library" value="true" />
            </manifest>
        </jar>

マニフェスト ファイルを更新します。

于 2013-04-19T15:36:09.987 に答える