LDAP 身份验证的 TLS

Vertica 在两个上下文中建立到 LDAP 服务器的连接,每个上下文都有一个对应的 TLS CONFIGURATION,用于控制每个连接是否应使用 TLS:

  1. LDAPLink:使用 LDAPLink 服务或其试运行功能在 Vertica 和 LDAP 服务器之间同步用户和组。

  2. LDAPAuth:当具有 ldap 身份验证方法的用户尝试登录 Vertica 时,Vertica 会尝试将该用户绑定到 LDAP 服务器中的匹配用户。如果绑定成功,Vertica 将允许用户登录。

查询 TLS_CONFIGURATIONS 以查看现有的 TLS CONFIGURATION:

=> SELECT * FROM tls_configurations WHERE name IN ('LDAPLink', 'LDAPAuth');
   name   |  owner  | certificate | ca_certificate | cipher_suites |  mode
----------+---------+-------------+----------------+---------------+----------
 LDAPLink | dbadmin | client_cert | ldap_ca        |               | VERIFY_CA
 LDAPAuth | dbadmin | client_cert | ldap_ca        |               | DISABLE
(2 rows)

本页介绍 LDAPAuth 上下文。有关 LDAPLink 上下文的详细信息,请参阅 LDAP Link 的 TLS

请注意,为 LDAP 身份验证配置 TLS 不会使用 TLS 对 Vertica 与客户端之间的连接进行加密。要配置客户端-服务器 TLS,请参阅配置客户端-服务器 TLS

配置 LDAP 身份验证

客户端与 Vertica 成功建立连接后,它们必须以用户身份进行身份验证,然后才能与数据库进行交互。如果用户具有 ldap 身份验证方法,Vertica 将连接到 LDAP 服务器以对用户进行身份验证。要为此上下文配置 TLS,请使用以下过程。

设置 LDAPAuth TLS 配置

LDAPAuth TLS 配置采用客户端证书和使用 CREATE CERTIFICATE 创建或导入的 CA 证书。Vertica 会将客户端证书提供给 LDAP 服务器以供其 CA 进行验证。Vertica 使用 CA 证书来验证 LDAP 服务器的证书。

有关密钥和证书生成的详细信息,请参阅生成 TLS 证书和密钥

  1. 如果您希望 Vertica 在建立连接之前验证 LDAP 服务器的证书,请生成或导入 CA 证书并将其添加到 LDAPAuth TLS 配置中。

    例如,要导入现有的 CA 证书 LDAP_CA.crt

    => \set ldap_ca '\''`cat ldap_ca.crt`'\''
    => CREATE CA CERTIFICATE ldap_ca AS :ldap_ca;
    CREATE CERTIFICATE
    

    然后,将 ldap_ca CA 证书添加到 LDAPAuth:

    ALTER TLS CONFIGURATION LDAPAuth ADD CA CERTIFICATES ldap_ca;
    
  2. 如果您的 LDAP 服务器需要验证客户端证书,您必须生成或导入客户端证书及其密钥,并将其添加到 LDAPAuth TLS 配置中。Vertica 会将此证书提供给 LDAP 服务器以供其 CA 进行验证。

    例如,要导入现有的证书 client.crt(由导入的 CA 签名)和密钥 client.key

    => \set client_key '\''`cat client.key`'\''
    => CREATE KEY client_key TYPE 'RSA' AS :client_key;
    CREATE KEY
    
    => \set client_cert '\''`cat client.crt`'\''
    => CREATE CERTIFICATE client_cert AS :client_cert SIGNED BY ldap_ca KEY client_key;
    CREATE CERTIFICATE
    

    然后,将 client_cert 添加到 LDAPAuth:

    => ALTER TLS CONFIGURATION LDAPAuth CERTIFICATE client_cert;
    
  3. 通过将 TLSMODE 设置为以下之一来启用 TLS 或 LDAPS(使用的确切协议取决于 AUTHENTICATION 对象中 host 的值)。 TRY_VERIFY 或更高版本需要 CA 证书:

    • ENABLE:启用 TLS。Vertica 不检查 LDAP 服务器的证书。

    • TRY_VERIFY:如果出现以下任一情况,则建立 TLS 连接:

      • LDAP 服务器提供一个有效的证书。

      • LDAP 服务器不提供证书。

      如果 LDAP 服务器提供无效证书,则使用纯文本连接。

    • VERIFY_CA:如果 Vertica 验证 LDAP 服务器的证书来自受信任的 CA,则连接成功。使用此 TLSMODE 会强制所有没有证书的连接使用纯文本。

    • VERIFY_FULL:如果 Vertica 验证 LDAP 服务器的证书来自受信任的 CA 并且 cn(通用名称)或 subjectAltName 属性与 LDAP 服务器的主机名或 IP 地址匹配,则连接成功。

      cn 用于用户名,因此 subjectAltName 必须与 LDAP 服务器的主机名或 IP 地址匹配。

    例如:

    => ALTER TLS CONFIGURATION LDAPAuth TLSMODE 'verify_ca';
    ALTER TLS CONFIGURATION
    
  4. 验证 LDAPAuthConfigParameter 参数是否正在使用 TLS 配置:

    => SHOW CURRENT LDAPAuthTLSConfig;
      level  |       name        | setting
    ---------+-------------------+----------
     DEFAULT | LDAPAuthTLSConfig | LDAPAuth
    (1 row)
    
  5. 启用身份验证记录:

    => ALTER AUTHENTICATION ldap_auth ENABLE;
    

创建 LDAP 身份验证记录

客户端与 Vertica 成功建立连接后,它们必须以用户身份进行身份验证,然后才能与数据库进行交互。如果用户具有 ldap 身份验证方法,Vertica 将连接到 LDAP 服务器并尝试绑定以对用户进行身份验证。

要查看现有的身份验证记录,请查询 CLIENT_AUTH

有关此过程中引用的参数的详细信息,请参阅 LDAP 身份验证参数

  1. 创建具有 LDAP 方法的身份验证记录。

    用于创建 LDAP 身份验证记录的语法:

    => CREATE AUTHENTICATION auth_record_name method 'ldap' HOST 'user_connection_source';
    

    例如,要创建适用于从任何主机连接的用户的 LDAP 身份验证记录:

    => CREATE AUTHENTICATION ldap_auth METHOD 'ldap' HOST '0.0.0.0/0';
    
  2. 更改身份验证类型,以设置 LDAP 服务器的主机和端口(可选)以及域名 (basedn),并绑定可分辨名称 (binddn)。

    • 要在 Vertica 和 LDAP 服务器之间使用明文连接,请将 host URL 设置为以 ldap:// 开头,并将 LDAPAuth 的 TLSMODE 设置为 DISABLE

    • 要使用 StartTLS,请将 host URL 设置为以 ldap:// 开头,并将 LDAPAuth 的 TLSMODE 设置为 ENABLE 或更高。

    • 要使用 LDAPS,请将 host URL 设置为以 ldaps:// 开头,并将 LDAPAuth 的 TLSMODE 设置为 ENABLE 或更高。

    例如,要在位于端口 5389 上且 IP 地址为 192.0.2.0 的 LDAP 服务器上搜索 Active Directory orgunit.example.com 中的用户:

    => ALTER AUTHENTICATION ldap_auth SET
        host='ldap://192.0.2.0:5389',
        basedn='ou=orgunit,dc=example,dc=com',
        binddn_prefix='cn=',
        binddn_suffix=',ou=orgunit,dc=example,dc=com';
    

    binddn_prefixbinddn_suffix 结合起来可创建完整 DN。也就是说,对于 Vertica 用户 asmith,' cn=asmith,ou=orgunit,dc=example,dc=com' 是 Vertica 尝试绑定时的完整 DN。

  3. 将身份验证记录授予用户或角色。

    例如:

    => GRANT AUTHENTICATION ldap_auth TO asmith;
    

    在这种情况下,当用户 asmith 尝试登录时,Vertica 会通过 ldap_auth 中指定的搜索库构建可分辨名称 'cn=asmith,ou=orgunit,dc=example,dc=com',然后连接到 LDAP 服务器,并尝试将其绑定到 Vertica 用户。如果绑定成功,Vertica 将允许 asmith 登录。