LDAP认证

    为了给openLooKeng启用LDAP身份验证,需要修改openLooKeng协调节点上的配置。Worker节点上的配置不需要更改,只为仅验证从客户端到协调节点的通信。但是,如果您希望使用SSL/TLS来确保openLooKeng节点之间的通信安全,需要配置/security/internal- communication

    安全LDAP协议

    openLooKeng需要安全的LDAP (LDAPS)协议,所以请确保在LDAP服务器上启用了TLS。

    openLooKeng协调节点的TLS配置

    您需要将LDAP服务器的TLS证书导入到openLooKeng协调节点默认的Java信任库中,以保证TLS连接的安全。可以使用下面的示例中的keytool命令将证书ldap_server.crt导入到协调节点上的信任库中。

    除此之外,使用HTTPS访问openLooKeng协调节点。您可以通过在协调节点上创建server_java_keystore来实现。

    openLooKeng协调节点配置

    在配置openLooKeng协调节点使用LDAP身份验证和HTTPS之前,必须对环境进行下列更改:

    您还需要对openLooKeng配置文件进行修改。LDAP认证在协调节点上分为两部分进行配置。第一部分是在协调节点的config.properties文件中启用HTTPS和密码认证。 第二部分是将LDAP配置为密码验证器插件。

    服务器配置属性

    以下示例列出了需要在协调节点的config.properties文件中添加的属性:

    1. http-server.authentication.type=PASSWORD
    2. http-server.https.enabled=true
    3. http-server.https.port=8443
    4. http-server.https.keystore.path=/etc/openLooKeng.jks
    5. http-server.https.keystore.key=keystore_password

    注意

    http-server.authentication.password.user-mapping.patternhttp-server.authentication.password.user-mapping.file不能同时设置。

    密码验证器配置

    配置密码认证使用LDAP协议。在协调节点上创建etc/password-authenticator.properties文件。 示例:

    1. password-authenticator.name=ldap
    2. ldap.url=ldaps://ldap-server:636
    活动目录
    1. ldap.user-bind-pattern=${USER}@<domain_name_of_the_server>

    示例:

    1. ldap.user-bind-pattern=${USER}@corp.example.com
    OpenLDAP协议

    示例:

    1. ldap.user-bind-pattern=uid=${USER},OU=America,DC=corp,DC=example,DC=com

    基于LDAP群组组成员的授权

    除了基本的LDAP身份验证属性之外,还可以通过设置可选的ldap.group-auth-patternldap.user-base-dn属性,进一步根据组成员身份限制允许连接到openLooKeng协调节点的用户集。

    根据LDAP服务器的实现类型,可以使用属性ldap.group-auth-pattern,如下所示。

    活动目录
    1. ldap.group-auth-pattern=(&(objectClass=<objectclass_of_user>)(sAMAccountName=${USER})(memberof=<dn_of_the_authorized_group>))

    示例:

    1. ldap.group-auth-pattern=(&(objectClass=person)(sAMAccountName=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com))
    OpenLDAP协议

      示例:

      对于OpenLDAP,要使这个查询起作用,请确保启用memberOf overlay

      也可以使用此属性对用户进行基于复杂的群组授权搜索查询的授权。例如,如果要对属于多个组(在OpenLDAP中)中的任何一个组的用户进行授权,则此属性可以设置为:

      1. ldap.group-auth-pattern=(&(|(memberOf=CN=normal_group,DC=corp,DC=com)(memberOf=CN=another_group,DC=com))(objectClass=inetOrgPerson)(uid=${USER}))

      TLS配置

      使用LDAP身份验证时,应该使用HTTPS访问openLooKeng协调节点。openLooKeng命令行接口可以使用Java Keystore <server_java_keystore>文件或Java Truststore <cli_java_truststore>文件进行TLS配置。

      如果您使用keystore文件,可以将它复制到客户端,并用于它进行TLS配置。如果您正在使用truststore文件,则可以使用默认的Java truststore,也可以在命令行界面创建自定义的truststore。不建议在生产中使用自签名证书。

      openLooKeng命令行执行

      1. #!/bin/bash
      2. ./openlk-cli \
      3. --server https://openlookeng-coordinator.example.com:8443 \
      4. --keystore-path /tmp/openLooKeng.jks \
      5. --keystore-password password \
      6. --truststore-password password \
      7. --catalog <catalog> \
      8. --schema <schema> \
      9. --user <LDAP user> \
      10. --password

      使用中的方法验证密钥库文件的密码并查看其内容。

      openLooKeng命令行的SSL调试

      如果运行openLooKeng CLI时遇到SSL相关的错误,可以使用-Djavax.net.debug=ssl参数运行CLI进行调试。

      使用openLooKeng 命令行接口可执行jar来启用它。

      示例:

      1. java -Djavax.net.debug=ssl \
      2. -jar \
      3. hetu-cli-<version>-executable.jar \
      4. --server https://coordinator:8443 \
      5. <other_cli_arguments>

      常见SSL错误

      java.security.cert.CertificateException: No subject alternative names present

      当openLooKeng协调节点的证书无效,且在命令行接口--server参数中没有您指定的的IP地址时,就会出现此错误。您必须重新生成协调节点的SSL证书,并添加适当的SAN(使用者可选名称)

      如果https://使用URL中的IP地址而不是协调节点证书中包含的域,且证书中不包含SAN (使用者可选名称)参数,其对应的IP地址作为备选属性,则需要将SAN添加到此证书中。

      JDK升级相关的认证或SSL错误

      为了提高LDAPS(LDAP over TLS)连接的健壮性, 从JDK 8u181版本开始,默认启用端点识别算法。请参见随版本发布的版本说明书这里

      openLooKeng协调节点(运行JDK版本>= 8u181)上的同一个LDAP服务器证书,以前能够成功连接到LDAPS服务器,现在可能失败,并出现以下错误:

      1. javax.naming.CommunicationException: simple bind failed: ldapserver:636

      如果需要暂时关闭端点识别功能,可以在openLooKeng的jvm.config文件中增加属性。

      但是,在生产环境中,我们建议通过重新生成LDAP服务器证书来修复该问题,使证书SAN (Subject Alternative Name) 或证书使用者名称与LDAP服务器匹配。