我正在尝试为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
在我注解ssl和ssl_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=636和ldaptls=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的正确方式吗?
1条答案
按热度按时间of1yzvn41#
您混淆了使用SSL来保护客户端和PostgreSQL服务器之间的通信,以及使用SSL来保护PostgreSQL服务器和LDAP服务器之间的通信。您提到的所有设置(server.key、server. crt、ssl、ssl_ca_file)都是针对前者,而不是针对后者。
对于第二个主题,据我所知,这些证书不是通过PostgreSQL配置的。PostgreSQL只是将其外包给任何LDAP库,并通过该包进行配置。例如,/etc/ldap/ldap. conf。