在 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 版本 5.1 和 5.2 包含以下主要组件:

可以使用 Directory Server 控制台执行大多数管理任务。该控制台包含四个顶级选项卡:“任务”、“配置”、“目录”和“状态”。“目录”选项卡将目录条目显示为树。可以通过此选项卡浏览、显示和编辑所有条目和属性。

还可以通过编辑配置文件或使用命令行实用程序手动执行管理任务。

Sun Java System Directory Server 版本 6.x 提供以下方式来管理目录中的条目:

DSCC 已集成到 Sun JavaTM Web Console 中。DSCC 包含五个顶级选项卡:“一般任务”、“目录服务器”、“代理服务器”、“服务器组”和“设置”。

依次单击“目录服务器”选项卡、服务器的名称和“条目管理”选项卡后,将显示可以浏览、添加和修改条目的页面。目录信息树 (Directory Information Tree, DIT) 将显示在左侧。

还可以使用“一般任务”选项卡创建新条目或浏览数据。


注 –

有关如何执行以下步骤的详细信息,请参见随 Sun Java System Directory Server 提供的文档。


Procedure配置 Sun Java System Directory Server

  1. People 目录下创建 admin 用户和 Administrator 用户。

  2. 在顶层节点下创建角色 alladministrationmanagement

  3. 将创建的角色分配给 admin 用户和 Administrator 用户。

  4. 转至配置系统信息库

配置 Active Directory 服务

Active Directory 是 Windows 2003 的一个关键部件。它提供了各种可管理性、安全性以及互操作性功能。主要的管理工具是名为“Active Directory 用户和计算机”的管理单元。

Active Directory 不支持角色的概念。因此,在 Active Directory 中,必须使用的概念模拟 Java CAPS 角色。

您应在名为 CAPSRoles 的新组织单位中创建组,而不是在 Users 目录中创建组。


注 –

有关如何执行以下步骤的详细信息,请参见随 Active Directory 提供的文档。


Procedure配置 Active Directory 服务

  1. 启动“Active Directory 用户和计算机”管理工具。

  2. 右键单击根节点,然后选择“新建”>“组织单位”。

    将显示“新建对象 - 组织单位”对话框。

  3. 在“名称”字段中,输入一个值(例如 CAPSRoles)。

  4. 单击“确定”。

  5. 在该组织单位下,创建以下组:alladministrationmanagement。要创建组,请右键单击组织单位,然后选择“新建”>“组”。对组范围和组类型使用默认值。

    添加组后,这些组将显示在该组织单位下。

  6. admin 用户和 Administrator 用户作为您所创建的所有组的成员添加,方法是:双击每个组,然后从对话框中选择 adminAdministrator

  7. 转至配置系统信息库

配置 OpenLDAP Directory Server

OpenLDAP 项目提供了 LDAP 协议的开源实现。LDAP 服务器将作为名为 slapd 的独立守护进程运行。主要的配置文件名为 slapd.conf。此文件包含全局信息、特定于后端的信息以及特定于数据库的信息。可以使用多种方式将条目添加到数据库,例如,可以使用 slapadd 程序。要搜索数据库,请使用 ldapsearch 程序。

有关详细信息,请参见 http://www.openldap.org


注 –

有关如何执行以下步骤的详细信息,请参见随 OpenLDAP Directory Server 提供的文档。


Procedure配置 OpenLDAP Directory Server

  1. 在用户所在的节点下创建 admin 用户和 Administrator 用户。

  2. 如果您的模式中没有用于角色的节点,请为将在以下步骤中创建的特定于 Java CAPS 的角色创建一个节点。例如:


    dn: ou=CAPSRoles, dc=sun, dc=com
    objectClass: top
    objectClass: organizationalUnit
    ou: CAPSRoles
  3. 在角色所在的节点下创建角色 alladministrationmanagement。将 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. 根据需要,将其他用户添加到一个或多个角色。例如:


    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 服务器用于系统信息库用户管理,必须将 <Realm> 元素添加到系统信息库的 server.xml 文件中,该文件位于 JavaCAPS-install-dir/repository/repository/server/conf 目录中。

server.xml 文件包含用于指定用户数据库的平面文件实现的默认 <Realm> 元素。平面文件实现将使用 tomcat-users.xml 文件,该文件位于 JavaCAPS-install-dir/repository/repository/data/files 目录中。

下表介绍了 LDAP 版本的 <Realm> 元素所使用的属性。有关所有可能属性的详细介绍,请参见 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 目录的角色部分。要启用对整个子树的搜索,请将该值设置为 true

userBase 

包含用户的子树的基条目。如果未指定此属性,则搜索基为顶级上下文。 

userPattern 

用户目录条目的标识名 (Distinguished Name, DN) 的模式,遵循 java.text.MessageFormat 类所支持的语法,使用 {0} 表示应插入实际用户名的位置。

userRoleName 

用户目录条目中的属性名称,包含为此用户分配的角色名称的零个或多个值。此外,可以使用 roleName 属性指定要从通过搜索目录找到的各个角色条目中检索的属性的名称。如果未指定 userRoleName,将从角色搜索中派生用户的所有角色。

userRoleNamePattern 

角色目录条目的标识名 (Distinguished Name, DN) 的模式,遵循 java.text.MessageFormat 类所支持的语法,使用 {0} 表示实际的角色名称。在应插入实际用户名的 Java CAPS 中进行授权时,将使用此模式解析 DN 以获取实际的角色名称。

userSearch 

用于在使用 {0} 替换用户名之后选择用户条目的 LDAP 搜索过滤器。

userSubtree 

默认情况下,将仅在根条目的下一级搜索 LDAP 目录的用户部分。要启用对整个子树的搜索,请将该值设置为 true

Procedure配置系统信息库

  1. 打开 server.xml 文件,该文件位于 JavaCAPS-install-dir/repository/repository/server/conf 目录中。

  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。将第二个属性设置为用户的加密密码。请参阅以下示例。

    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="

    要对密码进行加密,请使用 encrypt 实用程序,该程序位于 JavaCAPS-install-dir/repository/repository/util 目录中。该实用程序的文件扩展名取决于您的平台。该实用程序使用未加密的密码作为参数。例如:


    C:\JavaCAPS6\repository\repository\util>encrypt mypwd
    LCUApSkYpuE
  7. 保存并关闭 server.xml 文件。

  8. 启动 LDAP 服务器。

  9. 关闭并重新启动系统信息库。

SSL 支持

默认情况下,系统信息库和 LDAP 服务器之间的通信没有加密。

要对系统信息库和 LDAP 服务器之间的通信进行加密,请对本主题中先前所介绍的过程进行以下添加和修改。

配置 LDAP 服务器上的 SSL

确保已将 LDAP 服务器配置为使用安全套接字层 (Secure Sockets Layer, SSL)。有关详细信息,请参见随 LDAP 服务器提供的文档。

在准备下一步时,请将 LDAP 服务器的证书导出为文件。

导入 LDAP 服务器的证书

必须将 LDAP 服务器的证书添加到系统信息库的可信证书列表中。该列表位于名为 cacerts 的文件中。

在以下过程中,您将使用 keytool 程序。此程序随 Java SDK 一起提供。

Procedure导入 LDAP 服务器的证书

  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"
    ...