このチュートリアルで開発するクライアントおよびサーバアプリケーションでは、認証と安全な通信の両方の分野で Kerberos Version 5 を使用します。このため、このドキュメントは、Kerberos に習熟している読者を対象としています。詳細は、Kerberos のドキュメントを参照してください。
Java GSS-API メソッドに必要な JAAS フレームワークおよび Kerberos 機構は、すべてのベンダーが提供するバージョン 1.4 以降の JRE に組み込まれています。JAAS は、バージョン 1.3 から始まる、別個にダウンロード可能なオプションパッケージとして利用できます。ベンダーの提供する JRE の中には、このチュートリアルの JAAS 認証に必要な Kerberos ログインモジュールを使用できないものもある可能性があります。ここでは、Sun Microsystems の提供する JRE (バージョン 1.4 以降) に含まれる Kerberos 用 ログインモジュールを使用します。
サンプルプログラムを実行するには、インストールされた Kerberos にアクセスする必要があります。続くセクションで説明するように、Kerberos 構成ファイル
krb5.conf
、およびこのファイルの格納先に関する記述も必要です。すべての Kerberos インストールで、Kerberos Key Distribution Center (KDC) が必要です。これには、Kerberos への認証に使用するユーザ名およびパスワードを含める必要があります。注: KDC 実装は、v 1.4 以降の J2RE ではなく Kerberos インストールの一部です。
大半の Kerberos インストールで、デフォルト領域および KDC などの確認に、Kerberos 構成ファイル
krb5.conf
が参照されます。krb5.conf
ファイルを含まない、Microsoft の提供する Windows 2000 用 Kerberos などを使用している場合、このファイルを作成するか、「デフォルト領域および KDC を表すプロパティの設定」で説明するシステムプロパティを使用する必要があります。
一般に、デフォルト領域およびその領域の KDC は、Kerberos 構成ファイル
krb5.conf
に指定されます。ただし、以下に示すシステムプロパティに領域および KDC を設定することにより、これらの値を指定することも可能です。java.security.krb5.realm
java.security.krb5.kdcプロパティを設定する場合、1 つだけ設定するのではなく、両方とも設定する必要があります。
また、これらのプロパティを設定する場合、
krb5.conf
ファイルも指定しないかぎり、相互領域認証は行えません。理由は、このファイルから、相互領域認証に必要な追加情報を取得するためです。これらのプロパティの値を設定する場合、
krb5.conf
に指定されたデフォルト領域および KDC 値はオーバーライドされます。デフォルト領域および KDC 以外の項目で値が必要な場合にも、krb5.conf
ファイルが参照されます。krb5.conf
ファイルが見つからない場合、これらの項目に使用されるデフォルト値は、実装により異なります。
krb5.conf
構成ファイルの検出必須の Kerberos 構成情報は、デフォルト領域およびデフォルト KDC です。「デフォルト領域および KDC を表すプロパティの設定」で説明したように、これらの値を示すプロパティを設定した場合、値は
krb5.conf
構成ファイルからは取得されません。これらのプロパティに値が設定されていないか、他の Kerberos 構成情報が必要な場合、
krb5.conf
ファイル内で必要な情報の検出が試みられます。krb5.conf
ファイルを検出するアルゴリズムを、次に示します。
- システムプロパティ
java.security.krb5.conf
が設定されている場合、その値にパスおよびファイル名が指定されていると見なされます。- このシステムプロパティが設定されていない場合、次のディレクトリ内で構成ファイルが検索されます。
ここで、<java-home> は JRE がインストールされているディレクトリを指します。たとえば、Solaris で、<java-home>\lib\security [Windows]
<java-home>/lib/security [Solaris and Linux]/j2sdk1.5
という名前のディレクトリに J2SE v 5.0 がインストールされている場合、次のディレクトリで構成ファイルの検索が行われます。/j2sdk1.5/jre/lib/security- ファイルが見つからない場合、以下で検索が行われます。
/etc/krb5/krb5.conf [Solaris]
c:\winnt\krb5.ini [Windows]
/etc/krb5.conf [Linux]- それでもファイルが見つからず、かつ検索中の構成情報がデフォルト領域および KDC では「ない」場合、実装固有のデフォルトが使用されます。一方、検索中の構成情報がデフォルト領域および KDC の場合、構成情報がシステムプロパティに指定されておらず、
krb5.conf
ファイルも見つからないため、例外がスローされます。
規則により、すべての Kerberos 領域名には大文字を使用し、すべての DNS ホスト名とドメイン名には小文字を使用します。Windows 2000 プラットフォームでは、ドメインが Kerberos 領域にもなっていますが、領域名は常にドメイン名を大文字に変えた名前になります。ホスト名は大文字と小文字が区別されませんが、命名規則によりすべて小文字にします。ホスト名は、それぞれのネームサービスにより、クライアントとサーバで同じホスト名に解決される必要があります。
ただし、Kerberos データベースのホスト名は、大文字と小文字が区別されます。KDC のホストベースのすべての Kerberos サービス主体では、ホスト名の大文字と小文字が区別されます。Kerberos サービス主体名で使用されるホスト名は、ネームサービスから返されるホスト名と完全に一致する必要があります。たとえば、ネームサービスが
raven.sun.com
などの完全修飾された小文字による DNS ホスト名を返してきた場合、管理者は、KDC でホストベースの主体名を作成する際に、host/raven.sun.com
のように完全修飾された小文字による同じ DNS ホスト名を使用する必要があります。
相互領域認証では、1 つの領域の主体が別の領域の主体を認証できます。Kerberos では、2 つの領域で暗号鍵を共有することにより、相互領域認証を実装しています。2 つの異なる領域の KDC が特別な相互領域の秘密鍵を共有し、領域間の境界を越える場合に、この秘密鍵を使用して識別情報を証明します。
共有される鍵は、Ticket Granting Service 主体の鍵です。単一領域の場合の標準的な Ticket Granting Service 主体を示します。
相互領域認証では、それぞれの参加領域で 2 つの主体が作成されます。領域が 2 つの場合は、ktbtgt/ACME.COM@ACME.COMENG.EAST.ACME.COM
とSALES.WEST.ACME.COM
が作成され、これらの主体は以下のようになります。リモート Ticket Granting Server 主体と呼ばれるこれらの主体は、両方の領域で作成する必要があります。krbtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM krbtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COMWindows 2000 の KDC では、Windows 2000 ドメインが作成されると、
krbtgt
アカウントが自動的に作成されます。このアカウントは、削除したり名前を変更したりすることはできません。領域のタイプ
複数の領域を設定する場合は、作成する領域の構成を 1 つの領域が他の領域のスーパーセットとなる「階層型」にするのか、領域間のマッピングの定義が必要な「直接型」にするのかを決定する必要があります。詳細については、Sun のドキュメント「Configuring Cross-Realm Authentication」を参照してください。相互領域認証の設定方法
推移型相互領域認証では、相互領域秘密鍵を介して接続される領域のパスを定義し、そのパスを使用して目的の領域から資格を取得するまで領域を横断することができます。Kerberos 構成ファイルの
[capaths]
セクションでは、推移型相互領域認証で使用する一連の認証パスが定義されています。クライアントは、[capaths]
を使用して、推移型相互領域認証を実行するための正しいパスを決定します。アプリケーションサーバは、[capaths]
セクションを調べて、相互領域認証パスが有効かどうかを判断します。たとえば、
ENG.EAST.ACME.COM
とSALES.WEST.ACME.COM
の間で相互領域認証を設定するには、krb5.conf
に以下のエントリを含めます。Windows 2000 では、2 つの領域間で信頼関係を設定する必要があります。構成方法の詳細については、Mircrosoft の Web サイト「Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability」を参照してください。[capaths] ENG.EAST.ACME.COM = { SALES.WEST.ACME.COM = . } SALES.WEST.ACME.COM = { ENG.EAST.ACME.COM = . }