インストールしたシステムのJavaセキュリティ・ポリシーを定義する、外部ポリシー構成ファイルの作成と修正を行います。
Java実行時のポリシーは、さまざまなソースを出所とするコードが、さまざまなプリンシパルとして実行されるときに、どのようなアクセス権を利用できるかを指定するもので、Policyオブジェクトによって表現されます。デフォルトのPolicyの実装は、静的なASCII形式のポリシー構成ファイルから情報を取得します。
ポリシー・ファイルは、簡単なテキスト・エディタを使用するか、このドキュメントで説明するグラフィカルなPolicy Toolユーティリティを使用して作成できます。Policy Toolを使うと、入力の手間を省けるだけでなく、ポリシー・ファイルの構文について知る必要がなくなるため、エラーを減らすことができます。
「Policy Toolの使用法」セクションでは、Policy Toolを使用してポリシー・ファイルを作成および修正する方法について説明します。
「例」セクションでは、Policy Toolの使用例を紹介し、詳しく説明します。
「関連項目」セクションでは、関連するドキュメントへのリンクを提供します。
Policy Toolを起動するには、コマンド行に次のように入力します。
policytool
「Policy Tool」ウィンドウが表示されます。
Policy Toolは、起動するたびに、「ユーザー・ポリシー・ファイル」とも呼ばれるファイルからポリシー情報を取得して、ウィンドウに表示しようとします。デフォルトのユーザー・ポリシー・ファイルは、ホーム・ディレクトリにある.java.policy
という名前のファイルです。ポリシー・ファイルが見つからない場合は、そのことを示すメッセージと空白の「Policy Tool」ウィンドウが表示されます。つまり、ウィンドウに見出しやボタンは表示されますが、データは含まれていません(次の画面を参照)。
続いて、作業する任意のポリシー・ファイルを開くことができます。また、ポリシー・エントリを追加したり、必要に応じてキーストアを指定したりして、ファイルを保存すれば、新しいポリシー・ファイルを作成することもできます。
Policy Toolをはじめて実行した時点では、ユーザー・ポリシー・ファイルは存在していません(手動で作成した場合を除く)。
新しいポリシー・ファイルを作成するには、「ファイル」メニューから「新規」コマンドを選択します。現在開かれているポリシー・ファイルがあれば、必要に応じてファイルの保存を促すメッセージが表示された後で、そのファイルが閉じられて、新しい「Policy Tool」ウィンドウが表示されます。そのウィンドウには見出しやボタンが表示されていますが、データは含まれていません。
注: 上記の操作は、Policy Toolをはじめて実行する場合は必要ありません。Policy Toolはユーザー・ポリシー・ファイルを開こうとしますが、そのファイルがまだ存在しないため(手動で作成した場合を除く)、データが何も含まれていないウィンドウが表示されます。
新しい「Policy Tool」ウィンドウが表示されたら、ポリシー・エントリを作成したり、キーストアを指定したり(キーストア別名を指定したポリシー・エントリがある場合)することができます。ポリシー・ファイルは、いつでも保存できます。
現在作業中のポリシー・ファイルとは別のポリシー・ファイルで作業するには、「ファイル」メニューの「開く」コマンドを使います。
現在開かれているポリシー・ファイルがあれば、必要に応じてファイルの保存を促すメッセージが表示された後で、そのファイルが閉じられ、「開く」ダイアログが表示されます。このダイアログでは、ディレクトリ構造を移動して、作業するポリシー・ファイルがあるディレクトリを検索できます。ファイルを選択し、「了解」ボタンを選択します。
選択したポリシー・ファイルの情報が「Policy Tool」ウィンドウに表示されます。表示される情報は、ポリシー・ファイル名、キーストアのURL (存在する場合)、そしてポリシー・ファイル内の各ポリシー・エントリのCodeBase、SignedBy、およびプリンシパル・パートです。
ポリシー・エントリのSignedByパートで指定された別名の鍵情報を含むキーストアを指定するには、「キーストア」メニューの「編集」コマンドを選択します。
ダイアログ・ボックスが表示されたら、新しいキーストアのURLと、キーストアのタイプ(オプション)を指定します。
たとえば、/tests/
ディレクトリにある「mykeystore」という名前のキーストアを指定するには、「新規キーストアのURL」というラベルの付いたテキスト・ボックスに、次のfile:
URLを入力します。
file:/tests/mykeystore
また、キーストアのタイプとしてJKS (オラクル社がサポートしている独自のキーストアのタイプ)を指定するには、「新規キーストアのタイプ」というラベルの付いたテキスト・ボックスに、次のように入力します。
JKS
キーストアのURLと、必要に応じてタイプを指定したら、「了解」を選択します。操作を取り消す場合は、「取消し」を選択します。操作を取り消さなかった場合は、「キーストア:」というラベルの付いたテキスト・ボックスに、指定したキーストアのURLとタイプが表示されます。
新しいポリシー・エントリを追加するには、「Policy Tool」メイン・ウィンドウで「ポリシー・エントリの追加」ボタンを選択します。
「ポリシー・エントリ」ダイアログ・ボックスが表示されます。
このダイアログ・ボックスでは、次の情報を指定します
/TESTS/
ディレクトリからのコードを指定するには、「CodeBase」テキスト・ボックスで次のファイルURLを入力します。
file:/TESTS/
Signer
SignedByの値は、署名者に関連付けられた一式の公開鍵に、キーストアを使ってマッピングされる別名の文字列です。これらの公開鍵は、指定されたコード・ソースからのクラスが、実際にこれらの署名者によって署名されていることを検証するために使われます。
SignedByの値には、複数の署名者をカンマで区切った文字列を指定できます。たとえば、「Adam,Eve,Charles」のように指定します。この場合は、各要素がORではなくANDで結合され、「AdamとEveとCharlesによって署名された」という意味になります。
SignedByの値はオプションです。省略した場合は、「任意の署名者」という意味になり、コードに署名がなされているかどうかが検証されなくなります。同様に、CodeBaseエントリを省略した場合は、「任意のコード」という意味になり、コードの出所が検証されなくなります。
このため、CodeBaseエントリが存在しない場合は、指定された別名の署名が付いたすべてのコードに対し、指定されたアクセス権が与えられます。また、SignedByエントリが存在しない場合は、コードに署名がなされているかどうか、まただれが署名したかには関係なく、指定されたCodeBaseを出所とするすべてのコードに対して、指定されたアクセス権が与えられます。CodeBaseエントリとSignedByエントリがどちらも存在しない場合は、すべてのコードに対して、指定されたアクセス権が与えられます。
注: CodeBase値の正確な意味は、末尾の文字によって異なります。末尾が「/」のCodeBaseは、指定されたディレクトリ内のすべてのクラス・ファイル(JARファイルを除く)を示します。末尾が「/*」のCodeBaseは、そのディレクトリ内にあるすべてのファイル(クラス・ファイルとJARファイルの両方)を示します。末尾が「/-」のCodeBaseは、指定されたディレクトリとその下の全サブディレクトリ内のすべてのファイル(クラス・ファイルとJARファイルの両方)を示します。
プリンシパル・エントリには、「プリンシパルの値」のリストを指定します。それぞれのプリンシパルの値には、実行しているスレッドのプリンシパル・セット内に存在する必要があるprincipal_typeとprincipal_nameのペアを指定します。プリンシパル・エントリはオプションです。省略した場合は、「任意のプリンシパル」という意味になります。
principal_typeが指定されておらず、principal_nameが引用符で囲まれた文字列である場合は、実行時にポリシー・ファイルが処理されるときに、その文字列はキーストアの別名として扱われます。キーストアは別名を経由してX509証明書を調査し、問い合わせます。その証明書が見つかった場合、プリンシパルのタイプはjavax.security.auth.x500.X500Principalであると自動的に想定され、実際のプリンシパルの名前は、証明書にあるSubjectとして識別された名前であると想定されます。X509証明書へのマッピングが見つからない場合は、指定されたプリンシパルにアクセス権を付与しているポリシー・エントリ全体が無視されます。
新しいプリンシパルを追加するには、「ポリシー・エントリ」ダイアログ・ボックスで「プリンシパルの追加」ボタンを選択します。「プリンシパル」ダイアログ・ボックスが表示されます。
プリンシパルを追加するには、次のようにします。
「プリンシパルのタイプ:」というラベルの付いたドロップ・ダウン・リストには、組み込まれているプリンシパルのタイプのリストが表示されます。リストにあるタイプを指定する場合は、リストからそのタイプを選択します。選択したプリンシパルのタイプの完全な名前が、ドロップ・ダウン・リストの右側のテキスト・ボックスに表示されます。
ユーザーが定義したプリンシパルのタイプを指定する場合は、そのプリンシパルのタイプをテキスト・ボックスに入力します。
プリンシパルの名前を、「プリンシパルの名前:」テキスト・ボックスに直接入力します。たとえば、Signer
という名前のプリンシパルを指定するには、次のように入力します
Signer
プリンシパルの情報を指定したら、「了解」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。新しいプリンシパルの行が「プリンシパル」エントリに表示されます。
このあと、同じ手順に従って別のプリンシパルを追加することができます。既存のプリンシパルを編集または削除することもできます。
既存のプリンシパルを編集するには、「プリンシパル:」エントリでプリンシパルの行を選択し、「プリンシパルの編集」ボタンを選択します。または、そのプリンシパルの行をダブルクリックするだけでも、プリンシパルを編集できるようになります。
新しいプリンシパルを追加するときと同じ「プリンシパル」ダイアログ・ボックスが表示されます。ただし、この場合は、既存のプリンシパルの情報が表示されています。表示されている情報を変更するには、ドロップ・ダウン・リストから新しい値を選択するか、またはテキスト・ボックスの情報を新しい値で置き換えます。
終わったら、「了解」ボタンを選択します。変更を取り消す場合は、「取消し」を選択します。「プリンシパル:」エントリに、修正後のプリンシパルの情報が表示されます。
既存のプリンシパルを削除するには、「プリンシパル:」エントリでプリンシパルの行を選択し、「プリンシパルの削除」ボタンを選択します。
新しいアクセス権を追加するには、「ポリシー・エントリ」ダイアログ・ボックスで「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログ・ボックスが表示されます。
アクセス権を追加するには、次のようにします。
「アクセス権:」というラベルの付いたドロップ・ダウン・リストには、組み込まれているアクセス権のタイプのリストが表示されます。リストにあるタイプを指定する場合は、リストからそのタイプを選択します。選択したアクセス権のタイプの完全な名前が、ドロップ・ダウン・リストの右側のテキスト・ボックスに表示されます。
ユーザーが定義したアクセス権のタイプを指定する場合は、そのアクセス権のタイプをテキスト・ボックスに入力します。
「アクセス権:」ドロップ・ダウン・リストから組込みのアクセス権を選択した場合、そのタイプのアクセス権に特定のターゲット名の値があるときは、「ターゲット名:」というラベルの付いたドロップ・ダウン・リストにその値のリストが表示されるので、そのリストから値を選択します。
ターゲット名の選択肢が無限にある場合でも、特別な意味を持つ組込みのターゲット名があるときは、そのようなターゲット名がドロップ・ダウン・リストに表示されます。たとえば、ファイル・アクセス権のリストには、特別なターゲット名として「<<All FILES>>」が表示されます。
ドロップ・ダウン・リストにないターゲット名を指定するには、「ターゲット名:」ドロップ・ダウン・リストの右側のテキスト・ボックスにターゲット名を直接入力します。たとえば、/ptTest/
ディレクトリ内のdata
という名前のファイルを指定するには、次のように入力します。
/ptTest/data
一部のアクセス権は、ターゲット名だけを持ち、アクションを持っていません。このようなアクセス権では、「アクション:」ドロップ・ダウン・リストの右側のテキスト・ボックスを空白のままにしておきます。そのアクセス権が組込みのアクセス権の場合は、テキスト・ボックスが自動的に淡色表示になり、利用できなくなります。
アクションの指定が必要なアクセス権の場合は、カンマで区切ったアクションのリストをテキスト・ボックスに入力するか、またはドロップ・ダウン・リストからアクションを選択します。たとえば、ファイル・アクセス権に指定されたファイルに対して読込みと書込みの両方のアクセス権を指定するには、まずリストから「read
」(または「write
」、順序は任意)を選択します。テキスト・ボックスに「read」と表示されます。次に、「write
」を選択します。カンマとスペースが入力され、その後に「write」と表示されます。
アクセス権の情報を指定したら、「了解」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。新しいアクセス権の行が「ポリシー・エントリ」ダイアログに表示されます。
このあと、同じ手順に従ってアクセス権を追加することができます。既存のアクセス権を編集または削除することもできます。
既存のアクセス権を編集するには、「ポリシー・エントリ」ダイアログ・ボックスでアクセス権の行を選択し、「アクセス権の編集」ボタンを選択します。または、アクセス権の行をダブルクリックするだけでも、そのアクセス権を編集できるようになります。
新しいアクセス権を追加するときと同じ「アクセス権」ダイアログ・ボックスが表示されます。ただし、この場合は、既存のアクセス権の情報が表示されています。表示されている情報を変更するには、ドロップ・ダウン・リストから新しい値を選択するか、またはテキスト・ボックスの情報を新しい値で置き換えます。
終わったら、「了解」ボタンを選択します。変更を取り消す場合は、「取消し」を選択します。「ポリシー・エントリ」ダイアログ・ボックスに、修正後のアクセス権の情報が表示されます。
既存のアクセス権を削除するには、「ポリシー・エントリ」ダイアログ・ボックスでそのアクセス権の行を選択し、「アクセス権の削除」ボタンを選択します。
ポリシー・エントリの追加が終わったら、「ポリシー・エントリ」ダイアログ・ボックスの「完了」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。
「完了」を選択すると、これまでの操作で設定されたポリシー・エントリを表す行が「Policy Tool」ウィンドウに表示されます。この行には、CodeBase、SignedBy、およびプリンシパルの情報(存在する場合)が含まれています。「ポリシー・エントリ」ダイアログ・ボックスで、どの情報も指定しなかった場合は、
CodeBase <ALL>
とだけ表示されます。
注意: キーストアにまだ存在していないSignedBy別名がポリシー・エントリに含まれている場合は、ポリシー・エントリを閉じる時点で警告が表示されます。この場合は、「了解」を選択し、該当する別名を後で作成します。別名の指定に誤りがある場合は、ポリシー・エントリを編集して、別名を修正します。
既存のポリシー・エントリを編集するには、「Policy Tool」メイン・ウィンドウでそのエントリの行を選択し、「ポリシー・エントリの編集」ボタンを選択します。または、エントリの行をダブルクリックするだけでも、そのエントリが編集できるようになります。
新しいポリシー・エントリを追加するときと同じ「ポリシー・エントリ」ダイアログ・ボックスが表示されます。ただし、この場合は、既存のポリシー・エントリの情報が表示されています。表示されている情報を変更するには、CodeBaseおよびSignedByの値の場合は、必要な直接入力し、プリンシパルおよびアクセス権の値の場合は、ボタンを使用して情報を変更します。
終わったら、「完了」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。
ポリシー・ファイルからポリシー・エントリを削除するには、「Policy Tool」メイン・ウィンドウでそのエントリの行を選択し、「ポリシー・エントリの削除」ボタンを選択します。
選択したポリシー・エントリ全体が表示されます。このエントリを削除するには「了解」を選択し、このエントリを削除しない場合は「取消し」を選択します。
既存のポリシー・ファイルに対する変更内容を保存するには、「ファイル」メニューの「保存」コマンドを選択します。
作成した新しいポリシー・ファイルを保存したり、既存のポリシー・ファイルを新しい名前のポリシー・ファイルにコピーしたりするには、「ファイル」メニューの「別名保存」コマンドを選択します。「別名保存」ダイアログ・ボックスが表示されます。
ディレクトリ構造を移動して、ポリシー・ファイルの保存先のディレクトリを選択します。ファイル名を入力し、「了解」ボタンを選択します。ポリシー・ファイルが保存され、そのファイルの名前とパスが、「ポリシー・ファイル:」というラベルの付いたテキスト・ボックスに表示されます
Policy Toolを終了するには、「ファイル」メニューの「終了」コマンドを選択します。
Policy Toolが、警告を警告ログに保存したというメッセージを表示した場合は、「ファイル」メニューの「警告ログの表示」コマンドを選択すれば、警告ログを表示できます。
たとえば、ポリシー・ファイルでキーストアのURLを指定していて、このキーストアがまだ存在していない場合は、ファイルを開くときなど、さまざまな場面で警告が表示されます。警告が存在する場合でも、ポリシー・ファイルの作業は続行できます。
このあと紹介する例では、次の操作を実行する方法を説明します。
初期状態では、ユーザー・ポリシー・ファイルは存在していません(手動で作成した場合を除く)。ユーザー・ポリシー・ファイルを作成するには、コマンド行に次のように入力してPolicy Toolを起動します。
policytool
「Policy Tool」ウィンドウが表示されます。
Policy Toolは、起動するたびに、「ユーザー・ポリシー・ファイル」とも呼ばれるファイルからポリシー情報を取得して、ウィンドウに表示しようとします。デフォルトのユーザー・ポリシー・ファイルは、ホーム・ディレクトリにある.java.policy
という名前のファイルです。ポリシー・ファイルが見つからない場合は、そのことを示すメッセージと空白の「Policy Tool」ウィンドウが表示されます。つまり、ウィンドウに見出しやボタンは表示されますが、データは含まれていません(次の画面を参照)。
このウィンドウでエントリを追加してファイルを保存すれば、ユーザー・ポリシー・ファイルを作成できます。
たとえば、/tests/
ディレクトリからのすべてのクラスに対し、/temp/data/
ディレクトリ内のmydata
という名前のファイルを読み取るアクセス権を許可するとします。この場合は、まず、「Policy Tool」メイン・ウィンドウで「ポリシー・エントリの追加」ボタンを選択します。
「ポリシー・エントリ」ダイアログ・ボックスが表示されます。
このダイアログ・ボックスでは、
file:/tests/
というファイルURLを「CodeBase」テキスト・ボックスに入力します。
コードに署名がなされている必要はないので、「SignedBy」テキスト・ボックスは空白のままにします。
コードが認証されている必要はないので、「プリンシパル」リストは空白のままにします。
アクセス権を追加するために、「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログ・ボックスが表示されます。
アクセス権を追加するには、次のようにします。
/temp/data/mydata
ここまでの操作で、「アクセス権」ダイアログ・ボックスには、次のように表示されています。
アクセス権の情報を指定したら、「了解」ボタンを選択します。新しいアクセス権の行が「ポリシー・エントリ」ダイアログに表示されます。
これで、このポリシー・エントリの指定は終わりです。「完了」ボタンを選択します。ここで指定したポリシー・エントリを表す行が「Policy Tool」ウィンドウに表示されます。この行にはCodeBaseの値のみが含まれています。
ここでは、「http://example.com/」というURLにあるコードのうち、別名「Signer」の署名者によって署名された任意のコードに対して、/tmp/
ディレクトリ内のすべてのファイルへの読取りアクセス権を許可するとします。さらに、これらのコードに、任意のホストに対する送信ソケット接続を開始できるアクセス権も許可するとします。この場合は、次の2つの操作を行う必要があります。
ポリシー・エントリのSignedByパートで指定された別名の鍵情報を含むキーストアを指定するには、「Policy Tool」メイン・ウィンドウで「キーストア」メニューの「編集」コマンドを選択します。
ダイアログ・ボックスが表示されたら、新しいキーストアのURLと、キーストアのタイプ(オプション)を指定します。
たとえば、/tests/
ディレクトリにある「mykeystore」という名前のキーストアを指定するには、「新規キーストアのURL」というラベルの付いたテキスト・ボックスに、次のfile:
URLを入力します。
file:/tests/mykeystore
キーストアのタイプが、セキュリティ・プロパティ・ファイル内のkeystore.typeプロパティの値により指定されたデフォルトのタイプの場合は、「新規キーストアのタイプ」の値を入力する必要はありません。このプロパティのデフォルトの値は、「JKS」(オラクル社がサポートする独自のキーストアのタイプ)です。
キーストアのタイプを指定するには、「新規キーストアのタイプ」というラベルの付いたテキスト・ボックスに値を入力します。たとえば、キーストアのタイプが「JKS」であることを示すには、次のように入力します。
JKS
ダイアログ・ボックスには、次のように表示されます。
キーストアのURLとタイプを指定したら、「了解」を選択します。「キーストア:」というラベルの付いたテキスト・ボックスに、ここで指定したキーストアのURLとタイプが表示されます。
次に、ポリシー・エントリを指定する必要があります。
「ポリシー・ツール」メイン・ウィンドウで「ポリシー・エントリの追加」ボタンを選択します。「ポリシー・エントリ」ダイアログ・ボックスが表示されます。「CodeBase」テキスト・ボックスに、次のように入力します。
http://example.com/*
「*」は、このCodeBaseが指定したディレクトリ内のクラス・ファイルとJARファイルの両方を示すことを意味します。
「SignedBy」テキスト・ボックスには、次の別名を入力します。
Signer
コードが認証されている必要はないので、「プリンシパル」リストは空白のままにします。
指定する2つのアクセス権のうち、最初のアクセス権を追加するために、「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログ・ボックスが表示されます。次のように操作します。
/tmp/
ディレクトリ内のすべてのファイルを指定します。
/tmp/*
「アクセス権」ダイアログ・ボックスには、次のように表示されます。
「了解」ボタンを選択します。新しいアクセス権の行が「ポリシー・エントリ」ダイアログに表示されます。
次に、2つ目のアクセス権を指定する必要があります。「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログ・ボックスで、次のように操作します。
*
「アクセス権」ダイアログ・ボックスには、次のように表示されます。
「了解」ボタンを選択します。新しいアクセス権の行が「ポリシー・エントリ」ダイアログに表示されます。
これで、ポリシー・エントリの指定は終わりです。「ポリシー・エントリ」ダイアログの「完了」ボタンを選択します。「Policy Tool」ウィンドウに、指定したCodeBase、SignedByおよびプリンシパルの値を含むポリシー・エントリの行が表示されます。
ここでは、次のようなX500名を持つプリンシパルにアクセス権を与えるとします。
CN=Signer,O=Oracle,C=US
このプリンシパルに、/tmp/
ディレクトリに対する書込みを許可します。
「ポリシー・ツール」メイン・ウィンドウで「ポリシー・エントリの追加」ボタンを選択します。「ポリシー・エントリ」ダイアログ・ボックスが表示されます。
コードの出所は制限しないので、「CodeBase」テキスト・ボックスは空白のままにします。
コードに署名がなされている必要はないので、「SignedBy」テキスト・ボックスは空白のままにします。
「プリンシパルの追加」ボタンを選択します。「プリンシパル」ダイアログ・ボックスで、次のように操作します。
CN=Signer,O=Oracle,C=US
「プリンシパル」ダイアログ・ボックスには、次のように表示されます。
「了解」ボタンを選択します。新しいプリンシパルの行が「プリンシパル」リストに表示されます。
アクセス権を追加するために、「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログ・ボックスが表示されます。次のように操作します。
/tmp/
ディレクトリ内のすべてのファイルを指定します。
/tmp/*
「了解」ボタンを選択します。新しいアクセス権の行が「ポリシー・エントリ」ダイアログに表示されます。
これで、ポリシー・エントリの指定は終わりです。「ポリシー・エントリ」ダイアログの「完了」ボタンを選択します。「Policy Tool」ウィンドウに、指定したCodeBase、SignedByおよびプリンシパルの値を含むポリシー・エントリの行が表示されます。
ここでは、作成したポリシー・ファイルを、デフォルトの場所(ホーム・ディレクトリ)にデフォルトの名前(.java.policy)で保存するとします。
作成したユーザー・ポリシー・ファイルを保存するために、「ファイル」メニューの「別名保存」コマンドを選択します。「別名保存」ダイアログ・ボックスが表示されます。
ホーム・ディレクトリまでディレクトリ構造を移動します。型
.java.policy
先頭にピリオドがあることに注意してください。その後、「了解」ボタンを選択します。ポリシー・ファイルが保存され、そのファイルの名前とパスが、「ポリシー・ファイル:」というラベルの付いたテキスト・ボックスに表示されます。
Policy Toolを終了するには、「ファイル」メニューの「終了」コマンドを選択します。