针对 AD 的 LDAP 身份验证
来自 PostgreSQL Wiki
跳转到导航跳转到搜索如何在 Postgresql 中使用 SSL 启用针对 Active Directory 的 LDAP 身份验证
以下说明适用于通过位于 [1] 的社区存储库进行 RPM 安装。RPM 已经包含 LDAP 支持。如果您使用的是 PostgreSQL 9.0 及更高版本,请将以下说明中的 9.4 和 94 替换为确切的 PostgreSQL 版本。
- 以 root 用户身份安装所有必需的 rpm 包。此包会拉取其他依赖项。
yum -y install postgresql94-server
- 初始化数据库
- 在 RHEL/CentOS/SL/OL 5&6 上
/sbin/service postgresql-9.4 initdb
- 在 Fedora 19+ 和 RHEL 7+ 上
/usr/pgsql-9.4/bin/postgresql94-setup initdb
- 通过编辑 /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 自动化。
- 更新 /var/lib/pgsql/data/postgresql.conf
- 监听所有 IP 地址上的连接
- listen_addresses ='*'
- 启用 SSL
- ssl=on
- 监听所有 IP 地址上的连接
- 生成自签名密钥和证书
- 这对于客户端与数据库之间的 SSL 通信是必需的。请遵循 Postgresql 官方文档 中的说明。
- 创建数据库
- createdb mydb
- 使 LDAPs 与 AD 协同工作
- 为了进行测试,您可能希望在 AD 上创建自签名证书
- 创建根证书颁发机构
- 如果您从 Verisign 导入证书,请跳过此部分,并继续执行第 2 部分(将服务器证书导入 AD)。
- 启动控制面板 **添加/删除程序** 小程序。
- 单击 **添加/删除 Windows 组件** 启动 Windows 组件向导。
- 当欢迎屏幕出现时,单击下一步。
- 当组件列表显示时,选中 **证书服务** 复选框,然后单击下一步。
- 选择类型 **企业根 CA**,然后单击下一步。
- 输入 CA 名称以及组织的其他信息,如屏幕所示。单击下一步。
- 接受证书数据库的默认位置(即,%systemroot%\System32\CertLog),然后单击下一步。
- 如果 Microsoft IIS 正在运行,该服务将停止,并显示一个对话框。单击确定。
- 将生成要复制的文件列表,并且将安装这些文件。还将安装服务和系统配置。您可能需要插入 Windows 2000 Server CD-ROM。
- 当向导完成时,单击 **完成**。
- 将服务器证书导入 Active Directory
- 打开 **默认组策略** 编辑器。导航到计算机配置->windows 设置->安全设置->公钥策略->受信任的根证书颁发机构。
- 右键单击 **受信任的根证书颁发机构**,然后选择导入。
- 单击下一步,并浏览到 CA 颁发的证书(.crt 文件)。单击打开。
- 从 Active Directory 导出 CA
- 单击 **受信任的根证书颁发机构** 打开文件夹
- 右键单击要导出的 CA,然后选择打开
- 单击 **详细信息** 选项卡,然后单击复制到文件按钮。
- 您将看到证书导出向导。单击 **下一步**。
- 选择要导出的格式。对于与 OpenSSL(OpenLDAP)一起使用,请选择 **Base-64 编码的 X.509** 格式。
- 将文件复制到 Redhat 4 服务器上的相应位置: **/etc/openldap/concerto.cer**
- 配置对 Active Directory 的 LDAPS 连接
- 配置 **ldap.conf** 并添加以下行
- TLS_CACERT /etc/openldap/concerto.cer
- TLS_CACERTDIR /etc/openldap/
- # TLS_REQCERT never
- 配置 **ldap.conf** 并添加以下行
- 启动 DB
- service postgresql start
- 尝试远程连接 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 客户端不会验证证书。不确定这是否是错误还是默认设置。