目次|前|次 |
セキュリティ・マネージャは、アプリケーションの実行中に自動的にインストールされるわけではありません。ローカル・ファイル・システムのアプリケーションに対して、ダウンロードしたアプレットに対するのと同じセキュリティ・ポリシーを適用するには、アプリケーションを実行するユーザーが、次のように新しい「-Djava.security.manager」コマンド行引数(java.security.managerプロパティの値を設定する)を使ってJava仮想マシンを呼び出す必要があります。
java -Djava.security.manager SomeAppあるいは、アプリケーション自体が、java.lang.Systemクラスの
setSecurityManager
メソッドを呼び出して、セキュリティ・マネージャをインストールする必要があります。
特定のセキュリティ・マネージャをコマンド行で指定できます。その場合、次に示すように「-Djava.security.manager」のあとに、等号、およびセキュリティ・マネージャとして使用するクラスの名前を指定します。
java -Djava.security.manager=COM.abc.MySecMgr SomeAppセキュリティ・マネージャが指定されない場合、デフォルトで組み込まれるセキュリティ・マネージャが使用されます(アプリケーションが別のセキュリティ・マネージャをインストールする場合を除く)。次のコードはすべて等価であり、デフォルトのセキュリティ・マネージャを使用します。
java -Djava.security.manager SomeApp java -Djava.security.manager="" SomeApp java -Djava.security.manager=default SomeAppJava 2 SDKにはjava.class.pathというプロパティが含まれます。ローカル・ファイル・システムに格納されるものの、基底クラスとしては扱われないクラス(SDKに組込みのクラスなど)は、このパスに置かれます。このパスのクラスは、安全なクラス・ローダーによってロードされ、実施中のセキュリティ・ポリシーに従います。
また、「-Djava.security.policy」コマンド行引数により、使用するポリシー・ファイルを指定できます。このコマンド行引数の詳細については、「デフォルト・システムおよびユーザー・ポリシー・ファイル」セクションで説明します。基本的に、コマンド行に「-Djava.security.policy」を含めない場合、セキュリティ・プロパティ・ファイルで指定されたポリシー・ファイルが使用されます。
「-Djava.security.policy」コマンド行引数を使用して、アプリケーションの実行の呼出し時に、追加のポリシー・ファイルまたは別のポリシー・ファイルを指定できます。たとえば、次のように入力した場合(ここで、pURLはポリシー・ファイルの位置を指定するURL)、セキュリティ・プロパティ・ファイルに指定されたすべてのポリシー・ファイルに加えて、指定したポリシー・ファイルがロードされます。
java -Djava.security.manager -Djava.security.policy=pURL SomeApp代わりに「==」を使って次のコマンドを記述すると、指定されたポリシー・ファイルだけが使用され、その他のポリシー・ファイルはすべて無視されます。
java -Djava.security.manager -Djava.security.policy==pURL SomeApp
checkPermission
メソッドの大部分の実装は、SecurityManagerの新しいcheckPermission
メソッドを呼び出す(デフォルトの実装ではAccessControllerのcheck
メソッドを呼び出す)ように変更されましたが、それらのメソッドはすべてサポートされています。特定の内部セキュリティ・チェックは、パラメータ化される場合を除いてSecurityManagerクラス内に引き続きあります。
現時点では、SecurityManagerを呼び出してクラス・ローダーの存在をチェックするかわりに、AccessControllerを呼び出すようにシステム・コードを変更していません。これは、SecurityManagerをサブクラス化し、check
メソッドをカスタマイズするサード・パーティのアプリケーションが存在する可能性があるからです。実際のところ、デフォルトで単にAccessController.checkPermission
を呼び出す新しいメソッドSecurityManager.checkPermission
を追加しました。
SecurityManagerとAccessControllerの関係を理解するには、SecurityManagerがアクセス制御の中心的な概念を表しており、AccessControllerがdoPrivileged
メソッドなど特殊な機能を使用した特定のアクセス制御アルゴリズムを実装していることに気付くだけで十分です。SecurityManagerを最新に保つことにより、下位互換性(以前のバージョンのJDKに基づく独自のセキュリティ・マネージャ・クラスを記述したアプリケーションとの互換性など)、および柔軟性(セキュリティ・モデルをカスタマイズして必須アクセス制御または複数レベルのセキュリティを実装するなど)を維持しています。AccessControllerを提供することで、もっとも制限が大きいと考え、ほとんどのシナリオで大規模なセキュリティ・コードを記述しなければならない重荷から一般的なプログラマを解放するアルゴリズムを組み込んでいます。
アプリケーション・コードでAccessControllerを使用することを強くお薦めします。一方、セキュリティ・マネージャの(サブクラス化による)カスタマイズは、最後の手段にし、細心の注意を払って実行してください。さらに、標準セキュリティ・チェックを呼び出す前に常に時間をチェックするようなカスタマイズされたセキュリティ・マネージャには、適切な場合にいつでもAccessControllerが提供するアルゴリズムを使用でき、使用する必要があります。
覚えておくことの1つは、独自のSecurityManager
を実装する場合、それを信頼されるソフトウェアとしてインストールし、それにjava.security.AllPermission
を付与すべきであるということです。これを実行する方法はいくつかあります。
SecurityManager
を拡張としてインストールできます。すべての拡張には既定でAllPermission
が付与されるためです。詳細については、拡張の作成と使用に関するレッスンを参照してください。
AllPermission
をSecurityManager
に付与するように、ポリシー・ファイルを調整できます。詳細については、「デフォルトのPolicyの実装とポリシー・ファイルの構文」を参照してください。
keytoolは、鍵と証明書をキーストアに格納します。デフォルトのキーストア実装は、キーストアをファイルとして実装します。キーストアは、非公開鍵をパスワードで保護します。
X.509証明書のチェーンは、証明書発行局(CA)という組織によって提供されます。アイデンティティ(CAを含む)は、その非公開鍵を使用して、オブジェクト(SSLを使用してセキュリティ設定したチャネルなど)との関係、署名したコードのアーカイブとの関係、および発行したX.509証明書(CA用)との関係を認証します。ブートストラップ・ツールとして、-genkeyコマンドを使用して生成した証明書は、証明書発行局が証明書チェーンを返すまで使用される可能性があります。
このデータベース内の非公開鍵は、不適切に公開されないように常に暗号化されて保存されます。データベースにアクセスするか、データベースを変更する場合には、パスワードが要求されます。これらの非公開鍵は、複数の単語で構成される「パスワード」を使用して暗号化されます。パスワードを忘れた場合、認証鍵を復元することはできません。
実際、キーストア内の各非公開鍵は、個々のパスワードによって保護することができます。このパスワードは、キーストアの全体的な整合性を保護するパスワードと同じである場合も、異なる場合もあります。
現在、このツールは、コマンド行でシェル・プロンプトに、単に「keytool」と入力して使用するようになっています。keytoolは、適切なJavaクラスを実行するスクリプトでSDKに組み込まれています。
各コマンドのコマンド行オプションは、任意の順序で指定できます。不正確なオプションを入力したり、「keytool -help」と入力すると、次のようなツールの使用法の概略が出力デバイス(シェル・ウィンドウなど)に出力されます。
% keytool -help KeyTool usage: -certreq [-v] [-alias <alias>] [-sigalg <sigalg>] [-file <certreq_file>] [-keypass <keypass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -delete [-v] -alias <alias> [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -export [-v] [rfc] [-alias <alias>] [-file <cert_file>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -genkey [-v] [-alias <alias>] [-keyalg <keyalg>] [-keysize <keysize>] [-sigalg <sigalg>] [-dname <distinguished_name>] [-validity <valDays>] [-keypass <keypass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -help -identitydb [-v] [-file <idb_file>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -import [-v] [-noprompt] [-alias <alias>] [-file <cert_file>] [-keypass <keypass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -keyclone [-v] [-alias <alias>] -dest <dest_alias> [-keypass <keypass>] [-new <new_keypass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -keypasswd [-v] [-alias <alias>] [-keypass <old_keypass>] [-new <new_keypass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -list [-v | -rfc] [-alias <alias>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -printcert [-v] [-file <cert_file>] -selfcert [-v] [-alias <alias>] [-sigalg <sigalg>] [-dname <distinguished_name>] [-validity <valDays>] [-keypass <keypass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>] -storepasswd [-v] [-new <new_storepass>] [-keystore <keystore>] [-storepass <storepass>] [-storetype <i>storetype</i>]
policytool
と入力すると呼び出されます。このツールもSDKに組み込まれたスクリプトで、適切な(非公開の)実装クラスを呼び出します。
使用法および最新のスクリーン・ショットを含む例については、PolicyToolのドキュメントを参照してください。ドキュメントは、policytool.htmlファイルに格納されており、このファイルはSDKがインストールされたディレクトリ内の次のディレクトリにあります。
/docs/technotes/tools/unix/または
/docs/technotes/tools/windows/ファイル区切り文字は、Windowsシステムでは、バックスラッシュになります。
% jarsigner Usage: jarsigner [options] jar-file alias jarsigner -verify [options] jar-file [-keystore <url>] keystore file location [-storepass <password>] password for keystore integrity [-keypass <password>] password for private key (if different) [-sigfile <file>] name of .SF/.DSA file [-signedjar <file>] name of signed JAR file [-verify] verify a signed JAR file [-verbose] verbose output when signing/verifying [-certs] display certificates when verbose and verifying [-internalsf] include .SF file inside signature block [-sectionsonly] don't compute hash of entire manifestこのツールもSDKに組み込まれたスクリプトです。このツールと既存のjarツールのスクリプトは、将来統合されて、署名付きまたは未署名のJARを作成する単一のコマンド行プリミティブになる可能性があります。