Kerberos 要件

このチュートリアルで開発するクライアントおよびサーバーアプリケーションでは、認証とセキュアな通信の両方の分野で 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 を表すプロパティーの設定

一般に、デフォルトのレルムおよびそのレルムの 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 ファイルを検出するアルゴリズムを、次に示します。

レルム名およびホスト名の命名規則

規則により、すべての Kerberos レルム名には大文字を使用し、すべての DNS ホスト名とドメイン名には小文字を使用します。Windows 2000 プラットフォームでは、ドメインが Kerberos レルムにもなっていますが、レルム名は常にドメイン名を大文字に変えた名前になります。

ホスト名は大文字と小文字が区別されませんが、命名規則によりすべて小文字にします。ホスト名は、それぞれのネームサービスにより、クライアントとサーバーで同じホスト名に解決される必要があります。

ただし、Kerberos データベースのホスト名は、大文字と小文字が区別されます。KDC のホストベースのすべての Kerberos サービスプリンシパルでは、ホスト名の大文字と小文字が区別されます。Kerberos サービスプリンシパル名で使用されるホスト名は、ネームサービスから返されるホスト名と完全に一致する必要があります。たとえば、ネームサービスが「raven.example.com」などの完全修飾された小文字による DNS ホスト名を返してきた場合、管理者は、KDC でホストベースのプリンシパル名を作成する際に、「host/raven.example.com」のように完全修飾された小文字による同じ DNS ホスト名を使用する必要があります。

相互レルム認証

相互レルム認証では、1 つのレルムのプリンシパルが別のレルムのプリンシパルを認証できます。

Kerberos では、2 つのレルムで暗号鍵を共有することにより、相互レルム認証を実装しています。2 つの異なるレルムの KDC が特別な相互レルムの秘密鍵を共有し、レルム間の境界を越える場合に、この秘密鍵を使用して識別情報を証明します。

共有される鍵は、Ticket Granting Service プリンシパルの鍵です。単一レルムの場合の標準的な Ticket Granting Service プリンシパルを示します。

ktbtgt/EXAMPLE.COM@EXAMPLE.COM
相互レルム認証では、それぞれの参加レルムで 2 つのプリンシパルが作成されます。レルムが 2 つの場合は、ENG.EAST.EXAMPLE.COMSALES.WEST.EXAMPLE.COM が作成され、これらのプリンシパルは次のようになります。
krbtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM
krbtgt/SALES.WEST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM
リモート Ticket Granting Server プリンシパルと呼ばれるこれらのプリンシパルは、両方のレルムで作成する必要があります。

Windows 2000 の KDC では、Windows 2000 ドメインが作成されると、krbtgt アカウントが自動的に作成されます。このアカウントは、削除したり名前を変更したりすることはできません。

レルムのタイプ

複数のレルムを設定する場合は、作成するレルムの構成を 1 つのレルムがほかのレルムのスーパーセットとなる「階層型」にするのか、レルム間のマッピングの定義が必要な「直接型」にするのかを決定する必要があります。

相互レルム認証の設定方法

推移型相互レルム認証では、相互レルム秘密鍵を介して接続されるレルムのパスを定義し、そのパスを使用して目的のレルムからクレデンシャルを取得するまでレルムを横断できます。

Kerberos 構成ファイルの [capaths] セクションでは、推移型相互レルム認証で使用する一連の認証パスが定義されています。クライアントは、[capaths] を使用して、推移型相互レルム認証を実行するための正しいパスを決定します。アプリケーションサーバーは、[capaths] セクションを調べて、相互レルム認証パスが有効かどうかを判断します。

たとえば、ENG.EAST.EXAMPLE.COMSALES.WEST.EXAMPLE.COM の間で相互レルム認証を設定するには、krb5.conf に次のエントリを含めます。

[capaths]
    ENG.EAST.EXAMPLE.COM = {
        SALES.WEST.EXAMPLE.COM = .
    }

    SALES.WEST.EXAMPLE.COM = {
         ENG.EAST.EXAMPLE.COM = .
    }
Windows 2000 では、2 つのレルム間で信頼関係を設定する必要があります。構成方法の詳細については、Mircrosoft の Web サイト「Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability」を参照してください。

Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.