このチュートリアルで開発するクライアントおよびサーバーアプリケーションでは、認証とセキュアな通信の両方の分野で 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 つのレルム間で信頼関係を設定する必要があります。構成方法の詳細については、Mircrosoft の Web サイト「Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability」を参照してください。