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つのレルム間で信頼関係を設定する必要があります。構成方法の詳細については、MicrosoftのWebサイト「Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability」を参照してください。

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