Java CAPS での LDAP の使用

LDAP サーバーを使用したリポジトリユーザーの管理

Java CAPS リポジトリを設定して、ユーザー管理に LDAP サーバーを使用することができます。

ユーザーがリポジトリにログインしようとすると、ユーザー名およびパスワードが、LDAP サーバーに格納されているユーザー名およびパスワードと照合されます。また、リポジトリのさまざまなオブジェクトに対するユーザーのアクセスを承認するために、ユーザーのロールのリストがサーバーから取得されます。

次の LDAP サーバーがサポートされています。

最初に LDAP サーバーを設定する必要があります。該当する節を参照してください。

次に、リポジトリを設定して、LDAP サーバーを特定し、適切な情報 (ディレクトリのうちユーザーが格納されている領域など) を見つけることができるようにします。「リポジトリの設定」を参照してください。

リポジトリと LDAP サーバーの間の通信を暗号化する場合は、「SSL のサポート」を参照してください。

Java CAPS ユーザーの管理』には、リポジトリユーザーの管理に関する基本的な情報が記載されています。

Sun JavaTM System Directory Server の設定

Sun Java System Directory Server version 5.1 および 5.2 には、次の主要コンポーネントが含まれています。

ディレクトリサーバーコンソールを使用すると、ほとんどの管理タスクを実行できます。コンソールには、「タスク」、「設定」、「ディレクトリ」、および「ステータス」という 4 つの最上位タブがあります。「ディレクトリ」タブには、ディレクトリのエントリがツリー形式で表示されます。このタブからは、すべてのエントリと属性を参照、表示、および編集することができます。

設定ファイルを編集するか、コマンド行ユーティリティーを使用することによって、管理タスクを手動で実行することもできます。

Sun Java System Directory Server version 6.x には、ディレクトリのエントリを管理するための次の方法が用意されています。

DSCC は Sun JavaTM Web コンソールに組み込まれています。DSCC には、「共通タスク」、「ディレクトリサーバー」、「プロキシサーバー」、「サーバーグループ」、および「設定」という 5 つの最上位タブがあります。

「ディレクトリサーバー」タブ、サーバーの名前、「エントリの管理」タブの順にクリックすると、エントリの参照、追加、および変更を行うことのできるページに到達します。左側にディレクトリ情報ツリー (DIT) が表示されます。

「共通タスク」タブを使用して、新規エントリを作成したりデータを参照したりすることもできます。


注 –

次に示す手順を実行する方法の詳細については、Sun Java System Directory Server に付属のマニュアルを参照してください。


ProcedureSun Java System Directory Server を設定する

  1. admin ユーザーと Administrator ユーザーを People ディレクトリの下に作成します。

  2. alladministration、および management の各ロールを最上位ノードの下に作成します。

  3. 作成したロールを admin ユーザーと Administrator ユーザーに割り当てます。

  4. 「リポジトリの設定」 に進みます。

Active Directory サービスの設定

Active Directory は Windows 2003 の重要な部分です。Active Directory は管理容易性、セキュリティー、および相互運用性に関連するさまざまな機能を提供します。主要な管理ツールは、「Active Directory ユーザーとコンピュータ」と呼ばれるスナップインです。

Active Directory はロールの概念をサポートしていません。そのため、Active Directory では「グループ」の概念を使用して Java CAPS のロールのシミュレーションを行う必要があります。

Users ディレクトリ内にグループを作成するのではなく、CAPSRoles という新しい組織単位にグループを作成します。


注 –

次に示す手順を実行する方法の詳細については、Active Directory に付属のマニュアルを参照してください。


ProcedureActive Directory サービスを設定する

  1. 「Active Directory ユーザーとコンピュータ」管理ツールを起動します。

  2. ルートノードを右クリックし、「新規作成」、「組織単位」の順に選択します。

    「新しいオブジェクト - 組織単位 (OU)」ダイアログボックスが表示されます。

  3. 「名前」フィールドに値 (CAPSRoles など) を入力します。

  4. 「OK」をクリックします。

  5. 組織単位の下に、alladministration、および management というグループを作成します。グループを作成するには、組織単位を右クリックし、「新規作成」、「グループ」の順に選択します。「グループのスコープ」と「グループの種類」にはデフォルト値を使用します。

    グループを追加すると、それらが組織単位の下に表示されます。

  6. 作成したすべてのグループにメンバーとして admin ユーザーと Administrator ユーザーを追加します。そのためには、各グループをダブルクリックし、ダイアログボックスから adminAdministrator を選択します。

  7. 「リポジトリの設定」 に進みます。

OpenLDAP Directory Server の設定

OpenLDAP プロジェクトでは、LDAP プロトコルのオープンソース実装が提供されています。LDAP サーバーは、slapd と呼ばれるスタンドアロンデーモンとして実行されます。主要な設定ファイルは slapd.conf と呼ばれます。このファイルには、グローバルな情報、バックエンド固有の情報、およびデータベース固有の情報が含まれています。データベースにエントリを追加するには、slapadd プログラムなどのさまざまな方法を使用できます。データベースを検索するには、ldapsearch プログラムを使用します。

詳細については、http://www.openldap.org を参照してください。


注 –

次に示す手順を実行する方法の詳細については、OpenLDAP Directory Server に付属のマニュアルを参照してください。


ProcedureOpenLDAP Directory Server を設定する

  1. ユーザーが置かれているノードの下に、admin ユーザーと Administrator ユーザーを作成します。

  2. 使用しているスキーマにロール用のノードがない場合は、次の手順で作成する Java CAPS 固有のロール用にノードを作成します。次に例を示します。


    dn: ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: organizationalUnit
    ou: CAPSRoles
  3. ロールが置かれているノードの下に、alladministration、および management というロールを作成します。各ロールに admin ユーザーと Administrator ユーザーを一意のメンバーとして追加します。次に例を示します。


    dn: cn=all, ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: groupOfUniqueNames
    cn: all
    ou: CAPSRoles
    uniqueMember: uid=admin, ou=People, dc=sun, dc=com
    uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com
    
    dn: cn=administration, ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: groupOfUniqueNames
    cn: administration
    ou: CAPSRoles
    uniqueMember: uid=admin, ou=People, dc=sun, dc=com
    uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com
    
    dn: cn=management, ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: groupOfUniqueNames
    cn: management
    ou: CAPSRoles
    uniqueMember: uid=admin, ou=People, dc=sun, dc=com
    uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com
    
  4. 必要に応じて、ほかのユーザーを 1 つまたは複数のロールに追加します。次に例を示します。


    dn: cn=all, ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: groupOfUniqueNames
    cn: all
    ou: CAPSRoles
    uniqueMember: uid=admin, ou=People, dc=sun, dc=com
    uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com
    uniqueMember: uid=userA, ou=People, dc=sun, dc=com
    uniqueMember: uid=userB, ou=People, dc=sun, dc=com
    
    dn: cn=administration, ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: groupOfUniqueNames
    cn: administration
    ou: CAPSRoles
    uniqueMember: uid=admin, ou=People, dc=sun, dc=com
    uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com
    uniqueMember: uid=userB, ou=People, dc=sun, dc=com
    
    dn: cn=management, ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: groupOfUniqueNames
    cn: management
    ou: CAPSRoles
    uniqueMember: uid=admin, ou=People, dc=sun, dc=com
    uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com
  5. 「リポジトリの設定」 に進みます。

リポジトリの設定

リポジトリユーザーの管理に LDAP サーバーを使用するには、リポジトリの server.xml ファイルに <Realm> 要素を追加する必要があります。このファイルは JavaCAPS-install-dir/repository/repository/server/conf ディレクトリにあります。

server.xml ファイルには、ユーザーデータベースのフラットファイル実装を指定する、デフォルトの <Realm> 要素が含まれています。このフラットファイル実装は、JavaCAPS-install-dir/repository/repository/data/files ディレクトリにある tomcat-users.xml ファイルを使用します。

次の表に、<Realm> 要素のLDAP バージョンで使用される属性を示します。指定できるすべての属性の詳細については、org.apache.catalina.realm.JNDIRealm クラスに関する Tomcat のマニュアルを参照してください。

属性 

説明 

className 

常に org.apache.catalina.realm.JNDIRealm という値を使用してください。

connectionURL 

LDAP サーバーの場所を識別します。LDAP サーバーの名前、および LDAP サーバーが要求を待機するポートが含まれています。 

roleBase 

ロール検索のベースエントリ。この属性が指定されていない場合は、最上位のディレクトリコンテキストが検索ベースになります。 

roleName 

ロールの名前を格納する、ロールエントリの属性。 

roleSearch 

ロールエントリを選択するための LDAP 検索フィルタ。識別名を表す {0} や、認証ユーザーのユーザー名を表す {1} を、パターン置換として含むこともあります。特定の認証ユーザー (Administrator など) の場合には、オプション {0} を選択するようにしてください。

roleSubtree 

デフォルトでは、LDAP ディレクトリのロール領域の検索対象は、ルートエントリの 1 レベル下だけです。サブツリー全体の検索を有効にするには、この値を true に設定します。

userBase 

ユーザーを格納しているサブツリーのベースであるエントリ。この属性が指定されていない場合は、最上位のコンテキストが検索ベースになります。 

userPattern 

ユーザーのディレクトリエントリの識別名 (DN) を表すパターン。java.text.MessageFormat クラスでサポートされている構文に従っており、{0} は実際のユーザー名が挿入される場所を示します。

userRoleName 

このユーザーに割り当てられているロールの名前の値を 0 個以上格納する、ユーザーのディレクトリエントリの属性の名前。また、ディレクトリの検索で見つかった個々のロールエントリから取得する属性の名前を、roleName 属性を使用して指定することもできます。userRoleName が指定されていない場合は、ユーザーのすべてのロールがロール検索から取得されます。

userRoleNamePattern 

ロールのディレクトリエントリの識別名 (DN) を表すパターン。java.text.MessageFormat クラスでサポートされている構文に従っており、{0} は実際のロール名を示します。このパターンを使用して DN を解析することによって、Java CAPS での承認に使用される実際のロール名が取得され、そこで実際のユーザー名が挿入されます。

userSearch 

{0} のユーザー名を置換したあとでユーザーエントリを選択するために使用する LDAP 検索フィルタ。

userSubtree 

デフォルトでは、LDAP ディレクトリのユーザー領域の検索対象は、ルートエントリの 1 レベル下だけです。サブツリー全体の検索を有効にするには、この値を true に設定します。

Procedureリポジトリを設定する

  1. JavaCAPS-install-dir/repository/repository/server/conf ディレクトリにある server.xml ファイルを開きます。

  2. デフォルトの <Realm> 要素を削除するかコメントアウトします。

  3. Sun Java System Directory Server を使用している場合は、次の <Realm> 要素を <Engine> タグの内側に追加します。必要に応じて、デフォルト値を変更します。属性については前述の表で説明されています。


    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://localhost:489"
        userBase="cn=People,dc=sun,dc=com"
        userSearch="(uid={0})"
        userSubtree="true"
        userRoleName="nsroledn"
        userRoleNamePattern="cn={0},dc=sun,dc=com"
        roleSubtree="true"
    />
  4. Active Directory を使用している場合は、次の <Realm> 要素を <Engine> タグの内側に追加します。必要に応じて、デフォルト値を変更します。属性については前述の表で説明されています。


    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://localhost:389"
        userBase="cn=Users,dc=sun,dc=com"
        userSearch="(cn={0})"
        userSubtree="true"
        roleBase="ou=CAPSRoles,dc=sun,dc=com"
        roleName="cn"
        roleSearch="(member={0})"
        roleSubtree="true"
    />
  5. OpenLDAP Directory Server を使用している場合は、次の <Realm> 要素を <Engine> タグの内側に追加します。必要に応じて、デフォルト値を変更します。属性については前述の表で説明されています。


    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://localhost:389"
        userBase="ou=People,dc=sun,dc=com"
        userSearch="(uid={0})"
        userSubtree="true"
        roleBase="ou=CAPSRoles,dc=sun,dc=com"
        roleName="cn"
        roleSearch="(uniquemember={0})"
        roleSubtree="true"
    />
  6. LDAP サーバーが匿名の読み取りアクセスに対応するよう設定されていない場合は、connectionName 属性と connectionPassword 属性を <Realm> 要素に追加します。最初の属性は、Administrator ユーザーの DN に設定します。2 番目の属性は、ユーザーの暗号化されたパスワードに設定します。次の例を参照してください。

    Sun Java System Directory Server:


    connectionName="cn=Directory Manager"
    connectionPassword="E451KDVb0OPcH+GN46OZcg=="

    Active Directory:


    connectionName="Administrator@sun.com"
    connectionPassword="geEiVIbtO+DcH+GN46OZcg=="

    OpenLDAP Directory Server:


    connectionName="cn=Manager,dc=sun,dc=com"
    connectionPassword="l/ZRt1cfNKc="

    パスワードを暗号化するには、JavaCAPS-install-dir/repository/repository/util ディレクトリにある encrypt ユーティリティーを使用します。このユーティリティーのファイル拡張子は、プラットフォームによって異なります。このユーティリティーは、暗号化されていないパスワードを引数として受け取ります。次に例を示します。


    C:\JavaCAPS6\repository\repository\util>encrypt mypwd
    LCUApSkYpuE
  7. server.xml ファイルを保存して閉じます。

  8. LDAP サーバーを起動します。

  9. リポジトリをシャットダウンし、再起動します。

SSL のサポート

デフォルトでは、リポジトリと LDAP サーバーの間の通信は暗号化されません。

リポジトリと LDAP サーバーの間の通信を暗号化するには、このトピックで前述する手順に次の追加と変更を加えます。

LDAP サーバーでの SSL の設定

LDAP サーバーが SSL (Secure Sockets Layer) を使用するように設定されていることを確認します。詳細な手順については、LDAP サーバーに付属のマニュアルを参照してください。

次の手順の準備として、LDAP サーバーの証明書をファイルにエクスポートします。

LDAP サーバーの証明書のインポート

リポジトリの信頼できる証明書のリストに、LDAP サーバーの証明書を追加する必要があります。このリストは cacerts というファイルにあります。

次の手順では、keytool プログラムを使用します。このプログラムは Java SDK に付属しています。

ProcedureLDAP サーバーの証明書をインポートする

  1. JDK-install-dir/jre/bin ディレクトリに移動します。

    リポジトリのインストール時に指定した JDK を使用します。

  2. 次のコマンドを実行します。


    keytool -import -trustcacerts -alias alias -file certificate_filename 
    -keystore cacerts_filename

    -alias オプションには任意の値を指定できます。

    -file オプションには、LDAP サーバーの証明書の完全修飾名を指定します。次に例を示します。


    C:\mycertificate.cer

    -keystore オプションには、cacerts ファイルの完全修飾名を指定します。cacerts ファイルは JDK-install-dir/jre/lib/security ディレクトリにあります。次に例を示します。


    C:\Java\jdk1.6.0_06\jre\lib\security\cacerts
  3. プロンプトが表示されたら、キーストアのパスワードを入力します。デフォルトのパスワードは changeit です。

  4. この証明書を信頼することを確認するプロンプトが表示されたら、yes と入力します。

    次のメッセージが表示されます。


    Certificate was added to keystore

LDAP サーバーの URL の変更

server.xml ファイルの <Realm> 要素で、LDAP サーバーの URL を次のように変更します。

次に例を示します。


<Realm className="org.apache.catalina.realm.JNDIRealm"
    connectionURL="ldaps://myldapserver:636"
    ...