PostgreSQL:使用LDAPTLS和LDAPSCHEME保护LDAP(LDAPS)到AD的安全不起作用

rryofs0p  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(223)

我正在尝试为postgresql建立安全LDAP(LDAPS)连接。
目前,LDAP身份验证方法已建立并正在运行。
停靠的PostgreSQL v.14
LDAP连接到Active Directory。AD由IT部门设置
我尝试了几个选项,如LDAPTLS和LDAPSCHEME,但没有工作。

LDAPTLS:

通过添加以下规则修改了pg_hba.conf文件
host all all 0.0.0.0/0 ldap ldapserver=test.ldapserver.com ldapport=389 ldaptls=1 ldapbasedn="DC=test,DC=ldapserver,DC=com" ldapbinddn="CN=test-user,OU=dept,DC=test,DC=ldapserver,DC=com" ldapbindpasswd="ldappassword" ldapsearchfilter="(&(memberOf=CN=subgroup,OU=dept,OU=special,DC=test,DC=ldapserver,DC=com)(cn=$username))"
IT部门仅提供了根CA和子CA证书。未提供服务器密钥和服务器crt。
添加根ca证书并修改postgresql.conf

ssl = on
ssl_ca_file = '/etc/ssl/certs/root-ca.crt'

FATAL: could not load server certificate file "server.crt": No such file or directory
在我注解sslssl_ca_file之后,服务器启动,但抛出错误

LOG:  could not start LDAP TLS session: Connect error
DETAIL:  LDAP diagnostics: (unknown error code)
FATAL:  LDAP authentication failed for user "user"

如果提供了root-ca.crt,如何获取服务器密钥和服务器crt?

LDAP方案:

更新了pg_hba.conf文件,如下所示
host all all 0.0.0.0/0 ldap ldapserver=test.ldapserver.com ldapscheme=ldaps ldapbasedn="DC=test,DC=ldapserver,DC=com" ldapbinddn="CN=test-user,OU=dept,DC=test,DC=ldapserver,DC=com" ldapbindpasswd="ldappassword" ldapsearchfilter="(&(memberOf=CN=subgroup,OU=dept,OU=special,DC=test,DC=ldapserver,DC=com)(cn=$username))"

LOG:  could not perform initial LDAP bind for ldapbinddn="CN=test-user,OU=dept,DC=test,DC=ldapserver,DC=com" on server "test.ldapserver.com": Can't contact LDAP server
DETAIL:  LDAP diagnostics: (unknown error code)
FATAL:  LDAP authentication failed for user "user"

还添加了ldapport=636ldaptls=0,但错误仍然相同。
这里缺少什么?因为LDAP可以在不添加ldapscheme的情况下进行绑定
我也尝试使用ldapurl,但此处的url似乎无法正常工作
host all all 0.0.0.0/0 ldap ldapscheme=ldaps ldapurl="ldaps://test.ldapserver.com:636/DC=test,DC=ldapserver,DC=com?sub?memberOf=CN=subgroup,OU=dept,OU=special,DC=test,DC=ldapserver,DC=com" ldapbinddn="CN=test-user,OU=dept,DC=test,DC=ldapserver,DC=com" ldapbindpasswd="ldappassword
这是使用ldapurl的正确方式吗?

of1yzvn4

of1yzvn41#

您混淆了使用SSL来保护客户端和PostgreSQL服务器之间的通信,以及使用SSL来保护PostgreSQL服务器和LDAP服务器之间的通信。您提到的所有设置(server.key、server. crt、ssl、ssl_ca_file)都是针对前者,而不是针对后者。
对于第二个主题,据我所知,这些证书不是通过PostgreSQL配置的。PostgreSQL只是将其外包给任何LDAP库,并通过该包进行配置。例如,/etc/ldap/ldap. conf。

相关问题