我正在尝试将OpenLDAP(在RedHat 7.6上为2.4.44)作为客户端针对具有TLS的现有LDAP服务器运行。这运作良好-实在太好了。在我看来,OpenLDAP接受任何服务器证书,而不是根据我提供的CA对其进行验证。
这是我的ldap.conf文件:
TLS_CACERT /etc/openldap/cacerts/ldap-2019.pem
TLS_REQCERT demand
URI ldaps://ldap.mydomain.com/
BASE ou=people,dc=mydomain,dc=com
# Some optimizations suggested by
# https://sourceforge.net/p/xcat/wiki/Setting_up_LDAP_in_xCAT/
set_cachesize 0 268435456 1
set_lg_regionmax 262144
set_lg_bsize 2097152
我要完成的当然是OpenLDAP根据TLS_CACERT中的CA列表验证ldaps://ldap.mydomain.com的证书。
但是实际上,无论我放入TLS_CACERT文件中什么内容,只要它是有效的PEM文件,openldap似乎都可以成功连接。
我想念什么? OpenLDAP是否提供第二份CA咨询列表?为了以防万一,我还删除了/ etc / pki / tls中的CA。
更多详细信息:
如果删除删除在TLS_CACERT中指定的文件,则ldapsearch -x -uid = somename失败。如果TLS_CACERT不是有效的PEM文件,它也会失败。当客户端无法验证TLS证书时,这当然是预期的行为:
ldapsearch -x uid=somename
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
但是,如果我将完全没有意义的证书放入TLS_CACERT文件,则ldapsearch将返回结果,就像服务器的证书有效一样。
ldapsearch -x uid=somename
# extended LDIF
#
# LDAPv3
# base <ou=people,dc=mydomain,dc=com> (default) with scope subtree
# filter: uid=somename
# requesting: ALL
#
# somename, People, mydomain.com
dn: uid=somename,ou=People,dc=mydomain,dc=com
...
例如,我尝试将www.google.com的证书用作TLS_CACERT。我本来希望此连接失败,并出现同样的“无法联系LDAP服务器”错误。
更新:
我找到了原因,但没有找到解决方法。 OpenLDAP使用/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem中的证书捆绑包。重命名该文件会使ldapsearch发挥预期的作用,但是当然这不是可接受的解决方案,因为这是系统范围的文件,而不仅仅是OpenLDAP。
所以我的新问题是:如何防止OpenLDAP使用此文件?
更新2:
为澄清起见,这在RedHat 7.6和OpenLDAP 2.4.44上。我假设使用系统范围的CA捆绑软件是对OpenLDAP的RedHat修改。