フィードバック |
このチュートリアルでは、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.jar
JAR ファイル内でクラスを検索するため)
- セキュリティマネージャのインストールを指定する
-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.jar
JAR ファイル内でクラスを検索するため)
- セキュリティマネージャのインストールを指定する
-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
により、このチュートリアルで解説した方法で、共有コンテキストの確立およびメッセージの交換が行われます。ログイン時のトラブルシューティングについては、「トラブルシューティング」を参照してください。
フィードバック