このチュートリアルで開発するクライアントおよびサーバー・アプリケーションでは、認証とセキュアな通信の両方の分野で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>\lib\security
(Windows)<java-home>/lib/security
(SolarisおよびLinux)ここで、<java-home>はJREがインストールされているディレクトリを指します。たとえば、Solarisで、/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データベースのホスト名は、大文字と小文字が区別されます。KDCのホスト・ベースのすべてのKerberosサービス・プリンシパルでは、ホスト名の大文字と小文字が区別されます。Kerberosサービス・プリンシパル名で使用されるホスト名は、ネーム・サービスから返されるホスト名と完全に一致する必要があります。たとえば、ネーム・サービスが「raven.example.com
」などの完全修飾された小文字によるDNSホスト名を返してきた場合、管理者は、KDCでホスト・ベースのプリンシパル名を作成する際に、「host/raven.example.com
」のように完全修飾された小文字による同じDNSホスト名を使用する必要があります。
Kerberosでは、2つのレルムで暗号鍵を共有することにより、相互レルム認証を実装しています。2つの異なるレルムのKDCが特別な相互レルムの秘密鍵を共有し、レルム間の境界を越える場合に、この秘密鍵を使用して識別情報を証明します。
共有される鍵は、Ticket Granting Serviceプリンシパルの鍵です。単一レルムの場合の標準的なTicket Granting Serviceプリンシパルを示します。
ktbtgt/EXAMPLE.COM@EXAMPLE.COM相互レルム認証では、それぞれの参加レルムで2つのプリンシパルが作成されます。レルムが2つの場合は、
ENG.EAST.EXAMPLE.COM
とSALES.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
アカウントが自動的に作成されます。このアカウントは、削除したり名前を変更したりすることはできません。
Kerberos構成ファイルの[capaths]
セクションでは、推移型相互レルム認証で使用する一連の認証パスが定義されています。クライアントは、[capaths]
を使用して、推移型相互レルム認証を実行するための正しいパスを決定します。アプリケーション・サーバーは、[capaths]
セクションを調べて、相互レルム認証パスが有効かどうかを判断します。
たとえば、ENG.EAST.EXAMPLE.COM
とSALES.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」を参照してください。