针对 AD 的 LDAP 身份验证

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

如何在 Postgresql 中使用 SSL 启用针对 Active Directory 的 LDAP 身份验证

以下说明适用于通过位于 [1] 的社区存储库进行 RPM 安装。RPM 已经包含 LDAP 支持。如果您使用的是 PostgreSQL 9.0 及更高版本,请将以下说明中的 9.4 和 94 替换为确切的 PostgreSQL 版本。

  1. 以 root 用户身份安装所有必需的 rpm 包。此包会拉取其他依赖项。
     yum -y install postgresql94-server
  2. 初始化数据库
    在 RHEL/CentOS/SL/OL 5&6 上
    /sbin/service postgresql-9.4 initdb
    在 Fedora 19+ 和 RHEL 7+ 上
    /usr/pgsql-9.4/bin/postgresql94-setup initdb
  3. 通过编辑 /var/lib/pgsql/9.4/data/pg_hba.conf 文件修改客户端身份验证配置
    # 用于测试,允许任何本地用户无需密码
    # 针对 admin 和 postgres 用户的远程连接需要密码。其他所有人使用 LDAP
    # 类型 数据库 用户 CIDR 地址 方法
    # “local” 仅适用于 Unix 域套接字连接
    local all all trust sameuser
    # IPv4 本地连接
    host all all 127.0.0.1/32 trust sameuser
    # IPv6 本地连接
    host all all ::1/128 trust sameuser
    # 远程 TCP/IP 连接
    host all postgres,admin 172.20.0.0/16 password
    # 注意:不支持 ldaps 方案(只支持 ldap:// 或 ldap:// 与 ldaptls=1,不支持 ldapS:// - https://postgresql.ac.cn/docs/9.4/static/auth-methods.html#AUTH-LDAP)
    # 注意:自 PostgreSQL 11 开始,您就可以使用 ldaps,请参阅文档
    host all all 172.20.0.0/16 ldap "ldap://172.20.13.130/basedn;cn=;,cn=users,dc=concert,dc=music"
    • 在此配置中,我们假设所有用户都位于 cn=users,dc=concert,dc=music 下。否则,在 PostgreSQL 中定义的用户名需要包含 ou
      Jzw,ou=dev
    • 使用双引号包围 ldap URL 很重要。
    • LDAP 身份验证只验证 AD 中的用户凭据,但用户必须在 PostgreSQL 中预先创建。这可以通过 pg-ldap-sync 自动化。
  4. 更新 /var/lib/pgsql/data/postgresql.conf
    • 监听所有 IP 地址上的连接
      listen_addresses ='*'
    • 启用 SSL
      ssl=on
  5. 生成自签名密钥和证书
  6. 创建数据库
    createdb mydb
  7. 使 LDAPs 与 AD 协同工作
    • 为了进行测试,您可能希望在 AD 上创建自签名证书
    1. 创建根证书颁发机构
      • 如果您从 Verisign 导入证书,请跳过此部分,并继续执行第 2 部分(将服务器证书导入 AD)。
      1. 启动控制面板 **添加/删除程序** 小程序。
      2. 单击 **添加/删除 Windows 组件** 启动 Windows 组件向导。
      3. 当欢迎屏幕出现时,单击下一步。
      4. 当组件列表显示时,选中 **证书服务** 复选框,然后单击下一步。
      5. 选择类型 **企业根 CA**,然后单击下一步。
      6. 输入 CA 名称以及组织的其他信息,如屏幕所示。单击下一步。
      7. 接受证书数据库的默认位置(即,%systemroot%\System32\CertLog),然后单击下一步。
      8. 如果 Microsoft IIS 正在运行,该服务将停止,并显示一个对话框。单击确定。
      9. 将生成要复制的文件列表,并且将安装这些文件。还将安装服务和系统配置。您可能需要插入 Windows 2000 Server CD-ROM。
      10. 当向导完成时,单击 **完成**。
    2. 将服务器证书导入 Active Directory
      1. 打开 **默认组策略** 编辑器。导航到计算机配置->windows 设置->安全设置->公钥策略->受信任的根证书颁发机构。
      2. 右键单击 **受信任的根证书颁发机构**,然后选择导入。
      3. 单击下一步,并浏览到 CA 颁发的证书(.crt 文件)。单击打开。
    3. 从 Active Directory 导出 CA
      1. 单击 **受信任的根证书颁发机构** 打开文件夹
      2. 右键单击要导出的 CA,然后选择打开
      3. 单击 **详细信息** 选项卡,然后单击复制到文件按钮。
      4. 您将看到证书导出向导。单击 **下一步**。
      5. 选择要导出的格式。对于与 OpenSSL(OpenLDAP)一起使用,请选择 **Base-64 编码的 X.509** 格式。
      6. 将文件复制到 Redhat 4 服务器上的相应位置: **/etc/openldap/concerto.cer**
    4. 配置对 Active Directory 的 LDAPS 连接
      • 配置 **ldap.conf** 并添加以下行
        TLS_CACERT /etc/openldap/concerto.cer
        TLS_CACERTDIR /etc/openldap/
        # TLS_REQCERT never
    5. 启动 DB
      service postgresql start
  8. 尝试远程连接 DB
    • 在 Windows 客户端上,从 https://postgresql.ac.cn 下载 win32 二进制文件。它还包含一个用于与 .NET 客户端软件集成的 .NET 库。只安装 psql 包。
    • 使用 AD 用户 jzw 的密码登录
      psql -d mydb -h 172.20.x.x. -U jzw -W
    • 确保看到以下行,以验证客户端和数据库之间是否建立了 SSL 连接
      SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256). 
    • 要验证 PostgreSQL 和 AD 之间是否正常工作,您可以运行 tcpdump 以查看内容是否已加密。我发现 psql 客户端不会验证证书。不确定这是否是错误还是默认设置。