目次 | 前へ | 次へ |
セキュリティーマネージャーは、アプリケーションの実行中に自動的にインストールされるわけではありません。ローカルファイルシステムのアプリケーションに対して、ダウンロードしたアプレットに対するのと同じセキュリティーポリシーを適用するには、アプリケーションを実行するユーザーが、次のように新しい「-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 がアクセス制御の中心的な概念を表していることに注目すると、SecurityManager と AccessController との関係を理解できます。AccessController は、doPrivileged
メソッドなど特殊な機能を使用して、特定のアクセス制御アルゴリズムを実装しています。SecurityManager を最新に保つことにより、下位互換性 (以前のバージョンの JDK に基づく独自のセキュリティーマネージャークラスを記述したアプリケーションとの互換性など)、および柔軟性 (セキュリティーモデルをカスタマイズして必須アクセス制御または複数レベルのセキュリティーを実装するなど) が維持されています。AccessController により、もっとも限定的なアルゴリズムを提供することによって、大部分のシナリオに対応するセキュリティーコードを記述しなければならない重荷からプログラマを解放します。
アプリケーションコードで AccessController を使用することを強くお勧めします。一方、セキュリティーマネージャーの (サブクラス化による) カスタマイズは、細心の注意を払って行う必要があるため、最後の手段にすべきです。さらに、標準セキュリティーチェックを呼び出す前に常に日時をチェックするようなカスタマイズされたセキュリティーマネージャーには、適切な場合にはいつでも AccessController が提供するアルゴリズムを使用すべきです。
ツールの詳細については、SDK ディレクトリの次のサブディレクトリを参照してください。
/docs/technotes/tools/solarisおよび
/docs/technotes/tools/windowsWindows システムでは、ディレクトリの区切り文字は、「\」になります。
たとえば、Java 2 SDK が Solaris システムの「/j2sdk1.2」ディレクトリにインストールされている場合には、Solaris および Windows ユーザー用の keytool のドキュメントは、それぞれ次の場所に格納されています。
/j2sdk1.2/docs/tooldocs/solaris/keytool.html /j2sdk1.2/docs/tooldocs/windows/keytool.htmlJava 2 SDK が Windows システムの「C:\j2sdk1.2」ディレクトリにインストールされている場合、Solaris および Windows ユーザー用の keytool のドキュメントは、それぞれ次の場所に格納されています。
C:\j2sdk1.2\docs\tooldocs\solaris\keytool.html C:\j2sdk1.2\docs\tooldocs\windows\keytool.html
keytool は、鍵と証明書をキーストアに格納します。デフォルトのキーストア実装は、キーストアをファイルとして実装します。キーストアは、非公開鍵をパスワードで保護します。
X.509 証明書のチェーンは、証明書発行局 (Certification Authority、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/solaris/または
/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 を作成する単一のコマンド行プリミティブになる可能性があります。