目次
セキュリティーサンドボックスに制限されているコンポーネントを含む特権付きの Java Web Start アプリケーションおよびアプレットは、混合コードがアプリケーションベンダーによって意図されたものでないかぎり、安全でない可能性があります。プログラムに特権付きコンポーネントとサンドボックスコンポーネントの両方が含まれている場合は、セキュリティー警告が表示されます。JavaScript コードはサンドボックスに制限されているため、同様にセキュリティー警告が表示される可能性があることに注意してください。JavaScript コードを承認するためのマニフェスト属性については、「Caller-Allowable-Codebase 属性」を参照してください。
セキュリティー警告によれば、Java がセキュリティー問題の発生が考えられるアプリケーションコンポーネントを検出したため、アプリケーションベンダーに問い合わせて、それらのアプリケーションコンポーネントが改変されていないことを確認するよう勧めています。
このダイアログでは、それらのアプリケーションコンポーネントの実行を「ブロック」するか、または「ブロックしない」ことを選択します。オプションの「詳細情報」リンクをクリックすることもできます。
「ブロック」ボタンをクリックすると、安全でない可能性のあるコンポーネントの実行がブロックされるので、プログラムが終了する可能性があります。「ブロックしない」ボタンをクリックすると、いくつかの追加保護の下でアプリケーションまたはアプレットの実行が継続されます。
警告を表示するのがデフォルトの動作ですが、この状況の処理方法を管理するためのオプションが存在します。
混合コードプログラムの処理方法を管理するには、Java コントロールパネルを使用します。4 つのレベルの制御を使用できます。
Java コントロールパネルへのアクセス方法はプラットフォームごとに異なるほか、同一プラットフォームのリリースごとに異なる場合もあります。Microsoft Windows でそのパネルを表示するには、「スタート」メニュー > 「コントロールパネル」 > 「Java」
の順に選択します。
「詳細」タブの「混合コード」セクションでは、最初の 3 つのオプションはどれもソフトウェア保護を有効にしますが、動作が少しずつ異なります。
最後のオプション「検証を無効にする」はお勧めできません。このオプションを指定すると、特権付きコードとサンドボックスコードが混在するものを一切チェックしなくなります。ユーザーは、安全でない可能性のあるコードを、警告も追加の保護も一切なしで実行することになります。
deployment.properties
ファイルから
混合コード保護オプションの設定は、deployment.security.mixcode
配備プロパティーを使って行うこともできます (「デプロイメント構成ファイルおよびプロパティー」を参照)。
deployment.security.mixcode=ENABLE
このオプションは、混合コードの検証を有効にします。潜在的なセキュリティーリスクが検出されると、警告ダイアログが表示されます。これが、このプロパティーのデフォルト値です。
deployment.security.mixcode=HIDE_RUN
このオプションは警告ダイアログを抑制します。コードは、ユーザーが警告ダイアログで「ブロックしない」をクリックしたかのように実行されます。
deployment.security.mixcode=HIDE_CANCEL
このオプションは、警告ダイアログを抑止し、ユーザーが警告ダイアログで「ブロック」をクリックしたかのように動作します。
deployment.security.mixcode=DISABLE
このオプションはお勧めできません。特権付きコードとサンドボックスコードが混在するものをソフトウェアで一切チェックしなくなります。ユーザーは、安全でない可能性のあるコードを、警告も追加の保護も一切なしで実行することになります。
このセクションでは開発者とデプロイヤ向けに、信頼できるコンポーネントを信頼できないコンポーネントで置き換えることによってアプリケーションとアプレットが悪用されることを防止するためのベストプラクティスについて説明します。
Java SE 6 Update 19 以降、特権付きのアプリケーションとアプレットを配備するための 2 つの JAR マニフェスト属性が使用可能になりました。これらのマニフェスト属性のいずれかを含めた場合、警告ダイアログは表示されません。
開発者とデプロイヤは、自身の Java Web Start アプリケーションとアプレットをチェックし、特権付きコードと信頼できないコードが混在しているか確認すべきです。それらのアプリケーションとアプレットのユーザーが、それらのアプリケーションとアプレットを間違って悪意のある Web サイトからダウンロードする可能性がある場合には、次のいずれかの属性を指定して配備または再配備することを検討すべきです。既存の署名付き JAR にこれらのマニフェスト属性を追加したあと、JAR に署名し直す必要があります。注:マニフェストエントリを指定したときの再署名には、クラスのソースコードとリソースは不要です。
Trusted-Only
属性信頼できないコンポーネントを必要としないアプリケーションとアプレットでは、Trusted-Only
属性を使用します。警告ダイアログは表示されず、この属性を含む JAR ファイルをロードするアプリケーションまたはアプレットは、信頼できないクラスやリソースを一切ロードしません。この属性は、特権付きのアプリケーションまたはアプレットが転用されて、信頼できないコンポーネントが追加されることを防止します。詳細は、「Trusted-Only 属性」を参照してください。
Trusted-Library
属性信頼できないコンポーネントを許可するように設計されているアプリケーションとアプレットでは、Trusted-Library
属性を使用します。警告ダイアログは表示されず、アプリケーションまたはアプレットは、信頼できないクラスやリソースを含む JAR ファイルをロードできます。この属性は、特権付きのアプリケーションまたはアプレット内のコンポーネントが転用されて、信頼できないコンポーネントが追加されることを防止します。この属性の使用方法の詳細は、「Trusted-Library 属性」を参照してください。
Trusted-Library
属性は、特権付き Java コードとサンドボックス Java コード間の呼び出しに使用されます。Java コードを呼び出す JavaScript コードが含まれている場合は、Caller-Allowable-Codebase 属性を使用してください。
回答: マニフェストエントリを使用していない状態で特権付きのアプリケーションまたはアプレットを実行したときに警告ダイアログが表示された場合、プログラムに混合コードが含まれており、影響があることになります。
回答: Java Web Start アプリケーションと Java アプレットを Java SE または Java for Business 6 Update 19 以降でテストしてください。以前のリリースファミリを実行している場合はさらに、必要に応じて 5.0 Update 24 (またはそれ以降) または 1.4.2_26 (またはそれ以降) の下でプログラムをインストールしてテストすべきです。警告ダイアログが表示されたら、その Java Web Start アプリケーションまたはアプレットには混合コードが含まれています。
回答: エンドユーザーであれば、警告ダイアログへの応答として「ブロック」、「ブロックしない」のどちらをクリックするかを判断する前に、「詳細情報」リンクをクリックできます。IT 管理者またはシステム管理者であれば、前述の対応する配備プロパティーを使って、混合コード保護オプションのいずれかを選択し、企業内のデスクトップを構成できます。開発者およびデプロイヤであれば、改ざんを防止するためにマニフェストエントリを使ってアプリケーションを保護できます。これらのマニフェストエントリのいずれかを使用した場合、警告ダイアログは表示されません。
回答: アプリケーションベンダーは、2 つのマニフェストエントリを使って Java Web Start アプリケーションと Java アプレットの配備や再配備を行えます。
回答: 影響があるのは、Oracle からの次のリリースです。
回答: 署名付きの Java Web Start アプリケーションや Java アプレットに混合コードが含まれていれば、それがインターネット、イントラネットのどちらからダウンロードされたものであっても、ユーザーに警告ダイアログが表示されます。
回答: 混合コードの問題が適用されます。インターネットからのアプレットとアプリケーションについての質問を参照してください。
回答: いいえ。
回答: 使用しているベンダーに問い合わせて、そのベンダーの実装に関する助言を得てください。
回答: Java SE 6 Update 19 (またはそれ以降) には最新のセキュリティー修正が含まれているため、最新のリリースを使用することをお勧めします。
回答: テストに関する質問を参照してください。また、各アップデートリリースのリリースノートには、含まれている最新の変更点が記載されています。
回答: 次の SecurityException
メッセージは、情報およびデバッグのためだけに記述されています。実際のメッセージの内容は、実装やリリースによって変わる可能性があります。
これらの SecurityException
がスローされるのは、JAR ファイルにマニフェスト属性のいずれかが含まれ、その JAR ファイル自体に信頼できないコンポーネントが含まれていた場合です。
attempted to open sandboxed jar "+ url +" as Trusted-Only attempted to open sandboxed jar "+ url +" as Trusted-Library次の
SecurityException
がスローされるのは、JAR ファイルに Trusted-Only
マニフェスト属性が含まれ、信頼できないコンポーネントへのアクセスが以前に行われていた場合です。
attempted to open Trusted-Only jar "+ url +" on sandboxed loader次の
SecurityException
がスローされるのは、Trusted-Only
マニフェスト属性を含む JAR が少なくとも 1 つ開かれ、そのあとで信頼できないコンポーネントをロードすることが試みられた場合です。
Trusted-Only loader attempted to load sandboxed resource from "+ url"次の 2 つの
SecurityException
がスローされるのは、まず混合コンポーネントが検出され、混合を許可しないことが決定された場合です。最初の場合は、以前にロードされたものがすべて信頼できるもので、そのあと、信頼できないコンポーネントをロードすることが試みられました。2 番目の場合はその逆の条件です。
trusted loader attempted to load sandboxed resource from "+ url" sandboxed loader attempted to load trusted resource from "+ url"次の 2 つの
SecurityException
がスローされるのは、以前に混合コンポーネントが検出されていて、それらの共存を許可することが決定されたあとです。この例外は、信頼できるコンポーネントと信頼できないコンポーネントの間でコンポーネント名 (リソース名またはクラスパッケージ名) の競合が検出され、そのリソースまたはクラスのロード要求が拒否されたことを示しています。
"resource \"" + name + "\" does not match trust level of other resources of the same name" "class \"" + packageName + "\" does not match trust level of other classes in the same package"次の 2 つの
SecurityException
がスローされるのは、信頼できないコンポーネントへのアクセスが以前に行われ、信頼できるコンポーネントをロードする試みが以前に検出され、混合コンポーネントの共存を許可することが決定され、信頼できるコンポーネントを含む JAR が開かれ、信頼できるコンポーネントと信頼できないコンポーネントとの間でコンポーネント名の競合が検出された場合です。
"untrusted resource \"" + name + "\" in class path" "untrusted class package \"" + packageName + "\" in class path"
Trusted-Library
マニフェスト属性を使用するように簡単には更新できない混合コード Java Web Start アプリケーションがあります。all-permissions
セキュリティーモデルをリクエストするように JNLP を変更しなくても、サンドボックス内の JNLP に含まれる JAR ファイルに署名できますか。
回答: はい、できますが、Java SE または Java for Business Update 21 以降の Java Web Start ではいくつかの制限があります。サンドボックス内の JAR ファイルの署名は、all-permissions
セキュリティーモデルを使用する JNLP ファイル内の 1 つ以上の信頼できる JAR ファイルと同じ方法で (同じ署名証明書を使って) 行う必要があるほか、信頼できる JAR ファイルが Java Web Start によって開かれたあとで、同じ署名者を共有するすべてのサンドボックス内のリソースがロードされる必要があります。つまり、信頼できる JAR ファイルが、Java Web Start の JAR 検索順の前のほうに存在している必要があり、そうしないと単純な検索順とは無関係に JAR インデックス機能を使用してロードされるようにトリガーされます。Java Web Start では、まずメインアプリケーション JNLP の JAR が、次にすべての JNLP 拡張が宣言された順番で検索されます。JNLP 内では、まず「eager」というラベルの付いた JAR ファイルが検索され、次に「lazy」の JAR ファイルが検索され、続いて「part」機能を使用するというラベルの付いたすべての JAR ファイルが検索されます。
回答: いいえ、Java ME には影響はありません。