Directory Server は、LDAP (Lightweight Directory Access Protocol) で要求を処理するほか、DSMLv2 (Directory Service Markup Language version 2) で送信された要求も処理します。DSML は、クライアントがディレクトリ操作をエンコードするためのもう 1 つの方法です。サーバーは DSML を、同じアクセス制御とセキュリティー機能のすべてを持つほかの要求として処理します。この DSML 処理により、さまざまな種類のクライアントがディレクトリの内容にアクセスできるようになります。
Directory Server では、ハイパーテキスト転送プロトコル (HTTP/1.1) で DSMLv2 を使用できます。また、DSML の内容を転送するためのプログラミングプロトコルとして SOAP (Simple Object Access Protocol) version 1.1 が使われます。これらのプロトコルの詳細とDSML 要求の例については、『Sun Java System Directory Server Enterprise Edition 6.2 Reference』の第 10 章「Directory Server DSMLv2」を参照してください。
この節の内容は、次のとおりです。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
DSML モードを on に設定します。
$ dsconf set-server-prop -h host -p port dsml-enabled:on |
セキュア DSML ポートを設定します。
$ dsconf set-server-prop -h host -p port dsml-secure-port:port |
セキュアではない DSML ポートを設定します。
$ dsconf set-server-prop -h host -p port dsml-port:port |
デフォルトでは、このポートは disabled に設定されます。
サーバーを再起動します。
$ dsadm restart instance-path |
ユーザーによって定義されたパラメータと属性値に従い、DSML クライアントは次の URL を使用して、このサーバーに要求を送信できます。
http://host:DSML-port/ relative-URL
https://host:secure-DSML-port /relative-URL
relative-URL の読み取りおよび設定は、dsml-relative-root-url プロパティーを使用して行うことができます。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
DSML モードを off に設定します。
$ dsconf set-server-prop -h host -p port dsml-enabled:off |
セキュア DSML ポートを disabled に設定します。
$ dsconf set-server-prop -h host -p port dsml-secure-port:disabled |
サーバーを再起動します。
$ dsasm restart instance-path |
DSML 要求を受け入れるために必要なセキュリティーレベルを設定できます。このためには、DSML クライアント認証を設定する必要があります。
DSML クライアント認証モードを設定します。
$ dsconf set-server-prop -h host -p port dsml-client-auth-mode:dsml-mode |
デフォルトでは、dsml-client-auth-mode プロパティーは client-cert-first に設定されます。
dsml-mode は、次のいずれかです。
http-basic-only - これはデフォルト値です。サーバーは HTTP Authorization ヘッダーの内容を使用して、ディレクトリ内のエントリに対応付けるユーザー名を見つけます。このプロセスとその設定は SSL によって暗号化されますが、クライアント証明書は使用しません。これについては、「DSML のアイデンティティーマッピング」で説明しています。
client-cert-only: サーバーはクライアント証明書の資格情報を使用してクライアントを識別します。この設定では、DSML クライアントはすべて、セキュリティー保護された HTTPS ポートを使用して DSML 要求を送信し、証明書を提示する必要があります。サーバーは、このクライアント証明書がディレクトリ内のエントリと一致するかどうかを確認します。詳細は、第 5 章「Directory Server のセキュリティー」を参照してください。
client-cert-first: クライアント証明書が提示された場合、サーバーはまずその証明書を使用してクライアントの認証を試みます。それ以外の場合は、Authorization ヘッダーの内容を使用してクライアントを認証します。
HTTP 要求に証明書も Authorization ヘッダーもない場合は、匿名バインドを使用して DSML 要求を実行します。匿名バインドは、次の場合にも使われます。
client-cert-only が指定されている場合で、クライアントから有効な Authorization ヘッダーが提示されたが、証明書は提示されていないとき。
http-basic-only が指定されている場合で、クライアントから有効な証明書が提示されたが、Authorization ヘッダーは提示されていないとき。
証明書が提示されていてもエントリと一致しない場合や、HTTP Authorization ヘッダーが指定されていてもユーザーのエントリに対応付けることができない場合、クライアント認証方式にかかわらず DSML 要求は拒否され、エラーメッセージ 403「Forbidden」が返されます。
証明書を使わない基本認証を実行するときは、Directory Server はアイデンティティーマッピングというメカニズムを使用して、DSML 要求を受け入れるときに使うバインド DN を決定します。このメカニズムでは、HTTP 要求の Authorization ヘッダーから情報が抽出され、バインドに使うアイデンティティーを決定します。
DSML/HTTP のデフォルトのアイデンティティーマッピングは、サーバー設定の次のエントリで指定されます。
dn: cn=default,cn=HTTP-BASIC,cn=identity mapping,cn=config objectClass: top objectClass: nsContainer objectClass: dsIdentityMapping cn: default dsSearchBaseDN: ou=people dsSearchFilter: (uid=${Authorization})
この設定は、サーバーでは、Directory Server サフィックスに格納された DN のuid 値として、HTTP ユーザー ID を使用するべきであることを示します。たとえば、HTTP ユーザーが bjensen の場合、サーバーは、DN uid=bjensen,ou=people を使ってバインドを実行しようとします。
したがって、マッピングを適切に処理するためには、dsSearchBaseDN の値を完全にする必要があります。たとえば、dsSearchBaseDN の値を ou=people,dc=example,dc=com に変更することができます。そのあと、HTTP ユーザーが bjensen の場合、サーバーは、DN uid=bjensen,ou=people,dc=example,dc=com を使ってバインドを実行しようとします。
dn: cn=default,cn=HTTP-BASIC,cn=identity mapping,cn=config objectClass: top objectClass: nsContainer objectClass: dsIdentityMapping cn: default dsSearchBaseDN: ou=people,dc=example,dc=com dsSearchFilter: (uid=${Authorization})
マッピングエントリ属性 dsSearchFilter 内では、${header } という形式のプレースホルダを使用できます。ここで、header は HTTP ヘッダーの名前です。
DSML マッピングでもっともよく使われるヘッダーは、次のとおりです。
この文字列は、HTTP Authorization ヘッダーに格納されているユーザー名で置き換えられます。Authorization ヘッダーにはユーザー名とパスワードの両方が格納されていますが、このプレースホルダにはユーザー名だけが入ります。
この文字列は、HTTP From ヘッダーに格納されている電子メールアドレスで置き換えられます。
この文字列は、DSML 要求の URL に含まれるホスト名とポート番号 (サーバーのホスト名とポート番号) に置き換えられます。
DSML 要求で別の種類のアイデンティティーマッピングを実行するには、HTTP ヘッダーのアイデンティティーマッピングを新しく定義します。
デフォルトの DSML-over-HTTP アイデンティティーマッピングを編集するか、このプロトコル用のカスタムマッピングを作成します。
マッピングエントリは、エントリ cn=HTTP-BASIC,cn=identity mapping,cn=config の下になければなりません。
「ldapmodify によるエントリの追加」で説明するように、ldapmodify コマンドを使ってこのエントリをコマンド行から追加します。
Directory Server を再起動して、新しいマッピングを有効にします。
最初にカスタムマッピングが評価されます。カスタムマッピングが正常に行われていない場合は、デフォルトマッピングが評価されます。どのマッピングを使用しても、DSML 要求の認証に使うバインド DN を特定できない場合、DSML 要求は禁止され拒否されます (エラー 403)。