| |
フィードバック |
このチュートリアルでは、2 つのサンプルアプリケーションを使って、Java GSS-API の使用方法を説明します。 この API は、アプリケーション間の安全なメッセージ交換を可能にします。 このチュートリアルで使用するサンプルのクライアントアプリケーションおよびサーバアプリケーションは次の 2 つです。
このチュートリアルでは、ポリシーファイルとより複雑なログイン構成ファイルを使用します。 プログラムの実行にはセキュリティマネージャを使用するので、セキュリティ保護の必要な操作を行うには、必要なアクセス権が明示的に付与されていなければなりません。 このチュートリアルは、JAAS 承認により「ユーザ中心の」アクセス制御を追加する方法を示します。このため制御は、実行中のコードの種類と、コードを実行するユーザに基づいて適用されます。
注: このチュートリアルでは、「JavaTM GSS-API を使用した、JAAS プログラミングなしの安全なメッセージ交換」チュートリアルと同じクライアントおよびサーバアプリケーションを使用します。 ただし、「JavaTM GSS-API を使用した、JAAS プログラミングなしの安全なメッセージ交換」チュートリアルでは、JAAS (JavaTM Authentication and Authorization Service) プログラミングは不要です。その代わり、基盤となる機構によってクレデンシャルの取得方法が決定されます。
SampleServer プログラムの実行
この Java GSS-API チュートリアルは、JAAS 認証の最初のステップです。 前のチュートリアルでは、JAAS を使用してユーザの認証や承認を行う方法や、JAAS に必要なポリシーファイルとログイン構成ファイル (使用する基盤技術を指定する) の内容およびサンプルを示しました。 JAAS 入門用のチュートリアルである 「JAAS 認証」および「JAAS 承認」では、アプリケーションは、JAAS メソッドを直接呼び出しました。「JAAS Login ユーティリティの使用」チュートリアルでは、アプリケーションをこの操作から開放するユーティリティプログラムの使用方法を示しました。 このチュートリアルのクライアントおよびサーバアプリケーションでも同じユーティリティプログラムを使用しますので、あらかじめ Login ユーティリティのチュートリアルの内容を確認してからこのチュートリアルに進むことをお勧めします。この一連のチュートリアルでは、Kerberos を認証およびアプリケーションの安全な通信をサポートする基幹技術として使用しています。詳細は、「Kerberos 要件」を参照してください。
このチュートリアルで使用するアプリケーションの名前は、
SampleClientおよびSampleServerです。各アプリケーションは、このチュートリアルで提供する Login ユーティリティを実行して呼び出します。引数には、アプリケーションの名前 (
SampleClientまたはSampleServer) とアプリケーションが必要とする引数を指定します。 Login ユーティリティは、JAAS LoginContext を使って、Kerberos を使用するユーザを認証します。 最後に、Login ユーティリティはアプリケーションクラス (ここではSampleClientまたはSampleServer) のmainメソッドを呼び出して、アプリケーションに引数を渡します。以下に、
SampleClientおよびSampleServerアプリケーションの実行方法の概要を示します。
- 引数に
SampleServer、続いてSampleServerプログラム用の引数を指定して Login ユーティリティを実行することにより、SampleServerアプリケーションを実行します。 Login ユーティリティにより、SampleServerを実行するプリンシパルのパスワード入力が求められます(「Kerberos ユーザ名およびサービスプリンシパル名」を参照)。 認証完了後に、SampleServerが実行されます。
- 引数に注目し、クライアントからの接続を待機するポート番号を確認します。
- 指定されたポート上でクライアント接続を待機する ServerSocket を作成します。
- 接続を待機します。
- 引数に
SampleClient、続いてSampleClientプログラム用の引数を指定して Login ユーティリティを実行することにより、SampleClientアプリケーションを実行します。Login ユーティリティにより、Kerberos 名およびパスワードの入力が求められます。 認証完了後に、SampleServerが実行されます。
SampleServerの引数を読み取ります。引数は (1)SampleServerを表す Kerberos プリンシパルの名前 (「Kerberos ユーザおよびサービスプリンシパル名」を参照)、(2)SampleServerを実行するホスト (マシン) の名前、(3)SampleServerがクライアント接続を待機するポート番号です。
- 引数として渡されたホストおよびポートを使用して、
SampleServerへのソケット接続を試みます。
- ソケット接続が
SampleServerにより受け入れられます。両方のアプリケーションが、ソケット入力および出力ストリームからの DataInputStream および DataOutputStream を初期化して、将来のデータ交換に使用します。
SampleClientおよびSampleServerは、それぞれ GSSContext をインスタンス化し、以後の安全なデータ交換を可能にする共有コンテキストを確立します。
- これで、
SampleClientおよびSampleServerは、メッセージを安全に交換できます。
SampleClientおよびSampleServerは、メッセージ交換の完了時にクリーンアップ操作を実行します。
注: このチュートリアルで使用するコードについては、「JavaTM GSS-API を使用した、JAAS プログラミングなしの安全なメッセージ交換」チュートリアルの「SampleClientおよびSampleServerコード」のセクションで詳しく解説します。
Kerberos ユーザ名およびサービスプリンシパル名
このチュートリアルでは、基盤となる認証および安全な通信技術として Kerberos V5 が使用されているため、ユーザまたはサービスが要求される場合、常に Kerberos スタイルの プリンシパル名が使用されます。
たとえば、
SampleClientを実行する場合、「ユーザ名」の指定が求められます。Kerberos スタイルのユーザ名は、Kerberos 認証用だけに割り当てられたユーザ名です。このユーザ名は、ベースユーザ名 (例、mjones)、「@」、および領域の順序で構成されます (例、mjones@KRBNT-OPERATIONS.ABC.COM)。通常、
SampleServerなどのサーバプログラムは、「サービス」を提供し、特定の「サービスプリンシパル」に代わって実行されるプログラムと見なされます。SampleServerのサービスプリンシパル名が必要とされるのは、次の場合です。
SampleServerの実行時に、適切なサービスプリンシパルとしてログインする必要があります。 このチュートリアルのログイン構成ファイルは、実際にサービスプリンシパル名を指定します (Krb5LoginModule のオプションとして)。このため、JAAS 認証 (Login ユーティリティによって実行される) は、サービスプリンシパルのパスワードの指定をユーザに求めます。 適切なパスワードを指定すると、認証に成功し、サービスプリンシパル名からプリンシパルを含むサブジェクトが作成され、新しいアクセス制御コンテキストがサブジェクトに関連付けられます。 その後に実行されるコード (SampleServerコード) は、指定されたプリンシパルに代わって実行されたと見なされます。
SampleClientの実行時に、引数の 1 つにサービスプリンシパル名を指定します。 これは、SampleClientが適切なサービスを使用してセキュリティコンテキストの確立を開始するために欠かせない処理です。
- クライアントおよびサーバポリシーファイルはそれぞれ、サービスプリンシパル名と等価な名前 および「initiate」や「accept」(セキュリティコンテキスト確立の開始または受け入れ) と等価な操作を保持する ServicePermission を必要とします。
このドキュメントおよび関連するログイン構成ファイルやポリシーファイルを通じて、
という形式で記述された部分は、自分の環境で使用する実際の名前で置き換えてください。サービスプリンシパル名として、「任意の」Kerberos プリンシパルを実際に使用できます。このため、このチュートリアルを実行してみる場合、クライアントユーザ名とサービスプリンシパル名の両方に自分のユーザ名を使用できます。service_principal@your_realm通常、本番稼動環境では、システム管理者は、サーバを特定のプリンシパルのみで実行し、特定の名前を割り当てて使用します。大抵、割り当てる Kerberos 形式のサービスプリンシパル名は、次のようになります。
service_name/machine_name@realm;たとえば、「KRBNT-OPERATIONS.ABC.COM」という領域内の「raven」という名前のマシンで nfs サービスを実行する場合、サービスプリンシパル名は次のようになります。
nfs/raven@KRBNT-OPERATIONS.ABC.COMただし、このようなマルチコンポーネント名は必須ではありません。ユーザプリンシパル名のような、シングルコンポーネント名も使用できます。たとえば、インストールによって、領域内のすべての ftp サーバで同じ ftp サービスプリンシパル
ftp@realmを使用する場合と、ftp サーバごとに異なる ftp プリンシパルを使用する (たとえば、マシンhost1、host2の ftp プリンシパルがそれぞれftp/host1@realm、ftp/host2@realmとなる) 場合があります。プリンシパル名に領域を指定する必要がある場合
ユーザまたはサービスプリンシパル名の領域がデフォルト領域の場合は (「Kerberos 要件」を参照)、Kerberos にログインする際、ユーザ名を求めるプロンプトが表示された時点で、必ずしも領域を指定する必要はありません。 たとえばユーザ名が「mjones@KRBNT-OPERATIONS.ABC.COM」で、
SampleClientを実行する場合、ユーザ名が要求されたら、領域を省略して「mjones」とだけ入力できます。名前は Kerberos プリンシパル名のコンテキストで解釈され、必要に応じてデフォルトの領域が付けられます。GSSManager の
createNameメソッドにより、プリンシパル名が GSSName に変換される場合にも、領域の指定を省略できます。 たとえば、SampleClientの実行時に、引数の 1 つにサービスプリンシパル名を指定します。 この場合、SampleClientが名前をcreateNameメソッドに渡し、このメソッドが必要に応じてデフォルト領域を追加するため、名前を指定する際に領域を省略できます。プリンシパル名をログイン構成ファイルおよびポリシーファイルで使用する場合は、常に領域を含めて名前を指定することをお勧めします。理由は、これらのファイルのパーサの動作が実装に依存しないため、プリンシパル名の使用前にデフォルト領域が追加される場合と、追加されない場合があるためです。名前に領域が指定されていない場合、以降の操作は失敗します。
ログイン構成ファイル
JAAS を使用する場合は常に、使用する認証テクノロジをログイン構成ファイルに指定する必要があります。ログイン構成ファイルの詳細は、「JAAS ログイン構成ファイル」を参照してください。 ログイン構成ファイルに、クライアント側が使用するエントリとサーバ側が使用するエントリの 2 つが含まれる場合、
SampleClientとSampleServerの両方で同じログイン構成ファイルを使用できます。このチュートリアルで使用するログイン構成ファイル csLogin.conf を、次に示します。
SampleClient { com.sun.security.auth.module.Krb5LoginModule required; }; SampleServer { com.sun.security.auth.module.Krb5LoginModule required storeKey=true principal="service_principal@your_realm"; };各エントリの名前は、2 つのトップレベルアプリケーション
SampleClientおよびSampleServerのクラス名にそれぞれ一致します。これは、アプリケーション用の JAAS 操作を実行する Login ユーティリティに渡される名前でもあることに留意してください。 Login ユーティリティがログイン構成ファイル内で検索するエントリ名は、渡されたエントリ名と同じになります。両方のエントリでは、ユーザ認証の成功のため、Sun の Kerberos V5 ログインモジュールを使用する必要があることが指定されています。Krb5LoginModule が成功するのは、指定されたエンティティでの Kerberos KDC へのログインが成功した場合だけです。
SampleClientの場合、ユーザは名前とパスワードの入力を求められます。SampleServerの場合、ログイン構成ファイルに名前 (指定されたプリンシパル、詳細は後述) が指定されているため、SampleServerを実行するユーザにはその名前で指定されたエンティティのパスワードの入力だけが求められます。認証が成功するには、正確なパスワードを指定する必要があります。
SampleServerのエントリstoreKey=trueにより、ログイン時に指定されたパスワードから秘密鍵を計算すること、およびログインにより作成されたサブジェクトの非公開クレデンシャルに秘密鍵を格納することが指定されます。 この鍵は、SampleClientとSampleServerの間でセキュリティコンテキストを確立する際、相互認証に利用されます。Krb5LoginModule には
principalオプションを指定できます。このオプションを使用すると、指定されたプリンシパル (エンティティ/ユーザ) だけが決められたプログラムにログインするよう指定できます。 ここでは、SampleClientエントリにプリンシパルが指定されていない (必要に応じて指定可能) ため、ユーザはユーザ名およびパスワードの入力を求められます。有効なユーザ名およびパスワードを保持するユーザなら誰でもSampleClientを実行できます。 一方、SampleServerには特定のプリンシパルが指定されています。通常、システム管理者は、サーバを特定のプリンシパルとして実行することを好みます。 この場合、SampleServerを実行するユーザは、プリンシパルのパスワードの入力を求められます。認証が成功するには、適正なパスワードを指定する必要があります。「service_principal@your_realm」を、
SampleServerを表すサービスプリンシパルの名前で置き換える必要があります (「Kerberos ユーザ名およびサービスプリンシパル名」を参照)。Krb5LoginModule に引き渡し可能なすべてのオプションの詳細は、Krb5LoginModule ドキュメントを参照してください。
ポリシーファイル
SampleClientの実行時に使用されるポリシーファイルは client.policy、SampleServerの実行時に使用されるポリシーファイルは server.policy です。各ファイルの内容を、以下で説明します。クライアントのポリシーファイル
Login ユーティリティクラスに必要なアクセス権
Login.java(Login および MyAction) 内のクラスでは、多数のアクセス権が必要です。Login の使用に関する 前のチュートリアルで推奨したように、Login.classおよびMyAction.classファイルを含む JAR ファイルLogin.jarを作成し、ポリシーファイルclient.policyでLogin.jar AllPermissionを付与します。grant codebase "file:./Login.jar" { permission java.security.AllPermission; };
SampleClientに必要なアクセス権
SampleClientコードは、アクセス権の必要な 2 種類の操作を実行します。
SampleServerアプリケーションを実行するホストマシンとのソケット接続を確立します。
SampleServerとのセキュリティコンテキストを確立します。ソケット接続を開くのに必要なアクセス権を、次に示します。
permission java.net.SocketPermission "*", "connect";"*" は、
SampleServerを実行するマシンのホスト名または IP アドレスで置き換えることができます。セキュリティコンテキストの確立を開始するために必要なアクセス権は、基盤となる機構によって異なります。 このチュートリアルでは、基盤となる機構として Kerberos を使用します。このため、アクセス権
javax.security.auth.kerberos.ServicePermissionが 2 つ必要になります。ServicePermission には、サービスプリンシパル名および操作 (または操作のリスト) が必要です。セキュリティコンテキストの確立を開始するには、操作 "initiate" を指定して 2 つの ServicePermission を使用する必要があります。ServicePermission の名前により、以下が指定されます。
- 使用する領域のチケット交付サービス用のサービスプリンシパル名。このアクセス権を付与することにより、クライアントで Kerberos を使用できるようになります。
SampleServerを表すサービスプリンシパル名 (「Kerberos ユーザ名およびサービスプリンシパル名」を参照)。 このアクセス権を付与することにより、Kerberos を使ってサービスSampleServerと対話できるようになります。
SampleClientを実行する、認証済みの特定ユーザにアクセス権を付与します。このために、SampleClientのコード位置 (SampleClient.jar内)、およびユーザ名とユーザ (SampleClientを実行するユーザ) の領域を示すプリンシパル指示部の両方を指定します。 プリンシパル指示部を含むポリシーファイルgrant文の詳細は、このシリーズの 2 番目のチュートリアルの「プリンシパルベースのポリシーファイル文の作成方法」を参照してください。
grant文の基本的な書式を、以下に示します。grant CodeBase "file:./SampleClient.jar", Principal javax.security.auth.kerberos.KerberosPrincipal "your_user_name@your_realm" { permission java.net.SocketPermission "*", "connect"; permission javax.security.auth.kerberos.ServicePermission "krbtgt/your_realm@your_realm", "initiate"; permission javax.security.auth.kerberos.ServicePermission "service_principal@your_realm", "initiate"; };"
your_user_name@your_realm" には、使用する Kerberos ユーザ名、「@」、および領域を指定する必要があります。たとえば、ユーザ名が「mjones」、領域が「KRBNT-OPERATIONS.ABC.COM」の場合、"mjones@KRBNT-OPERATIONS.ABC.COM" (引用符も付ける) を指定しますまた、"
service_principal@your_realm" を、"krbtgt/your_realm@your_realm" 内の領域およびサーバを表すサービスプリンシパルの名前で置き換える必要もあります。前者が "krbtgt/KRBNT-OPERATIONS.ABC.COM@KRBNT-OPERATIONS.ABC.COM"、後者が "sample/raven.abc.com@KRBNT-OPERATIONS.ABC.COM"、ユーザ名が前の段落で指定したのと同じである場合を考えます。この場合、grant文は次のようになります。grant CodeBase "file:./SampleClient.jar", Principal javax.security.auth.kerberos.KerberosPrincipal "mjones@KRBNT-OPERATIONS.ABC.COM" { permission java.net.SocketPermission "*", "connect"; permission javax.security.auth.kerberos.ServicePermission "krbtgt/KRBNT-OPERATIONS.ABC.COM@KRBNT-OPERATIONS.ABC.COM", "initiate"; permission javax.security.auth.kerberos.ServicePermission "sample/raven.abc.com@KRBNT-OPERATIONS.ABC.COM", "initiate"; };サーバのポリシーファイル
Login ユーティリティクラスに必要なアクセス権
サーバポリシーファイル内の Login クラス用
grant文は、クライアントポリシーファイル内のgrant文とまったく同じです (「Login ユーティリティクラスに必要なアクセス権」を参照)。grant codebase "file:./Login.jar" { permission java.security.AllPermission; };
SampleServerに必要なアクセス権
SampleServerコードは、アクセス権の必要な 2 種類の操作を実行します。
- ソケット接続の受け入れ。
- セキュリティコンテキストの確立の受け入れ。セキュリティコンテキスト確立用の「アクセプタ」として機能します。
ソケット接続の受け入れに必要なアクセス権を、次に示します。
permission java.net.SocketPermission "*", "accept";"*" は、
SampleClientを実行するマシンのホスト名または IP アドレスで置き換えることができます。セキュリティコンテキストの確立を受け入れるのに必要なアクセス権を、次に示します。
ここで、"service_principal@your_realm" は、permission javax.security.auth.kerberos.ServicePermission "service_principal@your_realm", "accept";SampleServerを表すサービスプリンシパルの Kerberos 名です。
SampleServerを実行する特定の認証済みユーザ (SampleServerを表すと見なされるサービスプリンシパル) にアクセス権を付与するため、SampleServerのコード位置 (SampleServer.jar内) およびサービスプリンシパルを表すプリンシパル指示部の両方を指定します。この名前が、"sample/raven.abc.com@KRBNT-OPERATIONS.ABC.COM" である場合を考えましょう。この場合、grant文は次のようになります。grant CodeBase "file:./SampleServer.jar" Principal javax.security.auth.kerberos.KerberosPrincipal "sample/raven.abc.com@KRBNT-OPERATIONS.ABC.COM" { permission java.net.SocketPermission "*", "accept"; permission javax.security.auth.kerberos.ServicePermission "sample/raven.abc.com@KRBNT-OPERATIONS.ABC.COM", "accept"; };
SampleClientおよびSampleServerプログラムの実行
SampleClientおよびSampleServerプログラムを実行するには、次の操作を行います。
SampleServerの実行準備
SampleServerの実行準備では、以下の操作を行います。
- 次のファイルを、
SampleServerを実行するマシンからアクセス可能なディレクトリにコピーします。
- Login.java ソースファイル
- SampleServer.java ソースファイル
- csLogin.conf ログイン構成ファイル
- server.policy ポリシーファイル
csLogin.confの "service_principal@your_realm" を、SampleServerを表すサービスプリンシパルの名前で置き換えます。
- 表示される両方の場所で、
server.policyの "service_principal@your_realm" を、SampleServerを表すサービスプリンシパルの Kerberos 名で置き換えてください。これは、ログイン構成ファイルで使用する名前と同じ名前です。
Login.javaおよびSampleServer.javaをコンパイルします。javac Login.java SampleServer.java
Login.javaには 2 つのクラスが含まれるため、Login.javaをコンパイルするとLogin.classおよびMyAction.classが生成されます。
Login.class および MyAction.classを含むLogin.jarという名前の JAR ファイルを作成します。jar -cvf Login.jar Login.class MyAction.classSampleServer.classを含むSampleServer.jarという名前の JAR ファイルを作成します。jar -cvf SampleServer.jar SampleServer.class
SampleClientの実行準備
SampleClientの実行準備では、以下の操作を行います。
- 次のファイルを、
SampleClientを実行するマシンからアクセス可能なディレクトリにコピーします。
- Login.java ソースファイル
- SampleClient.java ソースファイル
- csLogin.conf ログイン構成ファイル
- client.policy ポリシーファイル
client.policyの各部を置き換えます。
- "your_user_name@your_realm" を、実際のユーザ名および領域で置き換えます。
- "krbtgt/your_realm@your_realm" の
your_realmを、実際の領域で置き換えます。
- "service_principal@your_realm" を、
SampleServerを表すサービスプリンシパルの Kerberos 名で置き換えます。
Login.javaおよびSampleClient.javaをコンパイルします。javac Login.java SampleClient.javaLogin.class および MyAction.classを含むLogin.jarという名前の JAR ファイルを作成します。jar -cvf Login.jar Login.class MyAction.classSampleClient.classを含むSampleClient.jarという名前の JAR ファイルを作成します。jar -cvf SampleClient.jar SampleClient.class
SampleServerの実行
SampleClientを実行する前に、必ずSampleServerを実行してください。SampleClientはSampleServerへのソケット接続を試みるため、SampleServerが稼動していないとソケット接続が受け付けられず、失敗します。
SampleServerを実行する場合、SampleServerを稼動する予定のマシンで実行してください。 このマシン名 (ホスト名) は、SampleClientの引数として指定します。サービスプリンシパル名は、ログイン構成ファイルやポリシーファイルなど、いくつかの場所に表示されます。
SampleServerの実行用に準備したディレクトリに移動します。以下を指定して、Loginクラスを実行します。
- 適切な
-classpath節 (Login.jarおよびSampleServer.jarJAR ファイル内でクラスを検索するため)
- セキュリティマネージャのインストールを指定する
-Djava.security.manager
-Djava.security.krb5.realm=<your_realm>(使用する Kerberos 領域)たとえば、領域が "KRBNT-OPERATIONS.ABC.COM" の場合、-Djava.security.krb5.realm=KRBNT-OPERATIONS.ABC.COMのように指定します。
-Djava.security.krb5.kdc=<your_kdc>(使用する Kerberos KDC)たとえば、KDC が "samplekdc.abc.com" の場合、-Djava.security.krb5.kdc=samplekdc.abc.comのように指定します。
-Djava.security.policy=server.policy(ポリシーファイルserver.policyを使用)
-Djava.security.auth.login.config=csLogin.conf(ログイン構成ファイルcsLogin.confを使用)Login の引数として、アプリケーションの名前 (ここでは "
SampleServer") を渡します。 次に、アプリケーションに必要なすべての引数を追加します。SampleServerの場合、クライアント接続の待機に使用するポート番号を引数として指定します。通常は使用しない大きなポート番号であれば、どの番号でも選択できます(例、4444)。以下に、Win32 および Unix システムの両方で使用可能なすべてのコマンドを示します。classpath 項目の区切りとして、UNIX システムでは コロンを使用するのに対し、Win32 システムではセミコロンを使用する点だけが異なります。
重要:これらのコマンドの、
<port_number>を適切なポート番号に、<your_realm>を使用する Kerberos 領域に、<your_kdc>を使用する Kerberos KDC にそれぞれ置き換えてください。>以下に、Win32 システムのコマンドを示します。
java -classpath Login.jar;SampleServer.jar -Djava.security.manager -Djava.security.krb5.realm=<your_realm> -Djava.security.krb5.kdc=<your_kdc> -Djava.security.policy=server.policy -Djava.security.auth.login.config=csLogin.conf Login SampleServer <port_number>以下に、UNIX システムのコマンドを示します。
java -classpath Login.jar:SampleServer.jar -Djava.security.manager -Djava.security.krb5.realm=<your_realm> -Djava.security.krb5.kdc=<your_kdc> -Djava.security.policy=server.policy -Djava.security.auth.login.config=csLogin.conf Login SampleServer <port_number>コマンド全体を 1 行で入力してください。ここでは、読みやすくするために複数行に分けて表示してあります。コマンドが長すぎる場合は、.bat ファイル (Win32) または .sh ファイル (UNIX) に記述します。このファイルを実行することで、コマンドを実行できます。
サービスプリンシパルの Kerberos パスワードの入力が求められます。ログイン構成ファイルで指定された基盤となる Kerberos 認証機構により、サービスプリンシパルの Kerberos へのログインが行われます。認証が成功すると、
SampleServerのコードがサービスプリンシパルとして実行されます。このコードは、指定されたポート上でソケット接続を待機します。ログイン時のトラブルシューティングについては、「トラブルシューティング」を参照してください。
SampleClientの実行
SampleClientを実行するため、SampleClientの実行準備を行ったディレクトリに移動します。次に、以下を指定して、Loginクラスを実行します。
- 適切な
-classpath節 (Login.jarおよびSampleClient.jarJAR ファイル内でクラスを検索するため)
- セキュリティマネージャのインストールを指定する
-Djava.security.manager
-Djava.security.krb5.realm=<your_realm>(使用する Kerberos 領域)
-Djava.security.krb5.kdc=<your_kdc>(使用する Kerberos KDC)
-Djava.security.policy=client.policy(ポリシーファイルclient.policyを使用)
-Djava.security.auth.login.config=csLogin.conf(ログイン構成ファイルcsLogin.confを使用)Login に、アプリケーションの名前 ("
SampleClient")、その後SampleClientに必要な引数を渡します。SampleClientの引数は、 (1)SampleServerを表すサービスプリンシパルの Kerberos 名、(2)SampleServerを実行するホスト (マシン) の名前、(3)SampleServerがクライアント接続を待機するポート番号です。以下に、Win32 および Unix システムの両方で使用可能なすべてのコマンドを示します。
重要: これらのコマンドの
<service_principal>、<host>、<port_number>、<your_realm>、および<your_kdc>の位置には、適切な値を指定してください (ポート番号は、SampleServer の引数として渡したポート番号と同じにする)。値を引用符で囲む必要はありません。以下に、Win32 システムのコマンドを示します。
java -classpath Login.jar;SampleClient.jar -Djava.security.manager -Djava.security.krb5.realm=<your_realm> -Djava.security.krb5.kdc=<your_kdc> -Djava.security.policy=client.policy -Djava.security.auth.login.config=csLogin.conf Login SampleClient <service_principal> <host> <port_number>以下に、UNIX システムのコマンドを示します。
java -classpath Login.jar:SampleClient.jar -Djava.security.manager -Djava.security.krb5.realm=<your_realm> -Djava.security.krb5.kdc=<your_kdc> -Djava.security.policy=client.policy -Djava.security.auth.login.config=csLogin.conf Login SampleClient <service_principal> <host> <port_number>コマンド全体を 1 行で入力してください。ここでは、読みやすくするために複数行に分けて表示してあります。
SampleServerを実行するコマンドと同様、コマンドウィンドウに直接入力するにはコマンドが長すぎる場合、.bat ファイル (Win32) または .sh ファイル (UNIX) に記述して、そのファイルを実行してください。入力が求められたら、Kerberos ユーザ名およびパスワードを入力します。ログイン構成ファイルで指定された基盤となる Kerberos 認証機構により、Kerberos へのログインが行われます。認証が成功すると、
SampleClientのコードがユーザの立場で実行されます。 このコードは、SampleServerとのソケット接続を要求します。SampleServerが接続を受け付けると、SampleClientおよびSampleServerにより、このチュートリアルで解説した方法で、共有コンテキストの確立およびメッセージの交換が行われます。ログイン時のトラブルシューティングについては、「トラブルシューティング」を参照してください。
![]()
![]()
フィードバック