Sun Java System Directory Server Enterprise Edition 6.3 管理指南

配置 DSML

除了处理通过轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 发送的请求之外,目录服务器还响应以目录服务标记语言版本 2 (Directory Service Markup Language version 2, DSMLv2) 发送的请求。DSML 是供客户端对目录操作进行编码的另一种方法。服务器将使用所有相同的访问控制和安全功能,以处理任何其他请求的方式来处理 DSML 请求。DSML 处理允许许多其他类型的客户端访问您的目录内容。

目录服务器支持通过超文本传输协议 (Hypertext Transfer Protocol, HTTP/1.1) 使用 DSMLv2,并将简单对象访问协议 (Simple Object Access Protocol, SOAP) 版本 1.1 用作编程协议来传输 DSML 内容。有关这些协议的详细信息以及 DSML 请求示例,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的第 10  章 “Directory Server DSMLv2”

本部分包含以下主题:

Procedure启用 DSML-over-HTTP 服务

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 将 DSML 模式设置为 on


    $ dsconf set-server-prop -h host -p port dsml-enabled:on
  2. 设置安全 DSML 端口。


    $ dsconf set-server-prop -h host -p port dsml-secure-port:port
    
  3. 设置非安全 DSML 端口。


    $ dsconf set-server-prop -h host -p port dsml-port:port
    

    默认情况下,此端口设置为 disabled

  4. 重新启动服务器。


    $ dsadm restart instance-path
    
接下来的操作

根据定义的参数和属性值,DSML 客户端可以使用以下 URL 将请求发送到此服务器:

http://host:DSML-port/ relative-URL

https://host:secure-DSML-port /relative-URL


注 –

可以使用 dsml-relative-root-url 属性读取和设置 relative-URL


Procedure禁用 DSML-over-HTTP 服务

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 将 DSML 模式设置为 off


    $ dsconf set-server-prop -h host -p port dsml-enabled:off
  2. 将安全 DSML 端口设置为 disabled


    $ dsconf set-server-prop -h host -p port dsml-secure-port:disabled
  3. 重新启动服务器。


    $ dsasm restart instance-path
    

Procedure配置 DSML 安全性

可以配置接受 DSML 请求时所需的安全级别。要执行此操作,必须配置 DSML 客户端验证。

  1. 设置 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“授权”头的内容来查找可以映射到目录中某个条目的用户名。此过程及其配置都通过 SSL 进行了加密,但不使用客户端证书。相关内容如DSML 标识映射所述。

    • client-cert-only - 服务器使用客户端证书中的凭证来识别客户端。使用此值时,所有 DSML 客户端都必须使用安全 HTTPS 端口发送 DSML 请求并提供证书。服务器会检查客户端证书是否与目录中的条目相匹配。有关详细信息,请参见第 6 章,目录服务器安全性

    • client-cert-first - 服务器首先尝试使用客户端证书(如果提供)来验证客户端。如果未提供证书,服务器将使用“授权”头的内容来验证客户端。

    如果 HTTP 请求中既未提供证书又未提供“授权”头,服务器将使用匿名绑定执行 DSML 请求。匿名绑定还将用于以下情形:

    • 指定 client-cert-only 时,客户端提供了有效的“授权”头但未提供证书。

    • 指定 http-basic-only 时,客户端提供了有效证书但未提供“授权”头。

    无论使用哪种客户端验证方法,如果提供证书但该证书与条目不匹配,或者指定 HTTP“授权”头但无法将其映射到用户条目,则 DSML 请求都将被拒绝,并显示错误消息 403:“禁止”。

DSML 标识映射

执行无证书的基本验证时,目录服务器将使用标识映射机制来确定接受 DSML 请求时要使用的绑定 DN。此机制将从 HTTP 请求的“授权”头中提取信息,以确定要用于绑定的标识。

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})

此配置表明,服务器应该使用 HTTP 用户 ID 作为目录服务器后缀中所存储的 DN 的 uid 值。例如,如果 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 映射中最常用的头。

${Authorization}

此字符串将由 HTTP“授权”头中包含的用户名替换。“授权”头同时包含用户名及其密码,但在此占位符中只替换用户名。

${From}

此字符串将由 HTTP“发件人”头中可能包含的电子邮件地址替换。

${host}

此字符串将由 DSML 请求 URL 中的主机名和端口号(即服务器的主机名和端口号)替换。

要使 DSML 请求执行其他类型的标识映射,请为 HTTP 头定义新的标识映射。

Procedure为 HTTP 头定义新的标识映射

  1. 编辑默认的 DSML-over-HTTP 标识映射,或为此协议创建自定义映射。

    映射条目必须位于 cn=HTTP-BASIC,cn=identity mapping,cn=config 条目下。

    可以从命令行中使用 ldapmodify 命令添加此条目,如使用 ldapmodify 添加条目所述。

  2. 重新启动目录服务器以使新映射生效。

    将首先评估自定义映射。如果没有成功的自定义映射,则评估默认映射。如果所有映射都无法确定 DSML 请求的绑定 DN,将禁止并拒绝该 DSML 请求(错误 403)。