当尝试与 Novel eDirectory 8.8 服务器建立 ldaps 连接时,有时我必须输入TLS_REQCERT never
客户端服务器 ldap.conf 文件。显然,这不是一个好主意。
我运行的命令是这样的,带有实际有效的凭据......
ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username"
在 Ubuntu 13.10 上,它运行良好。
在 SLES 上它运行良好。
在 CentOS 6.5 上它返回:
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
现在,我导入的证书是从 DigiCert 购买的通配符证书。我的同事发现一些报告表明某些系统存在通配符问题。
那么,通配符证书是罪魁祸首吗?如果是,我该如何修复它?
如果它不是通配符证书,那它是什么?
根据 Andrew Schulman 的建议,我添加了-d1
ldapsearch 命令。以下是我最终得到的结果:
ldap_url_parse_ext(ldaps://ldap.example.org)
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.org:636/??base)
Enter LDAP Password:
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.org:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.225.0.24:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
从这些话中,CentOS 不信任 DigiCert?或者 CentOS 没有受信任的发行者列表?
答案1
ldapsearch 正在 /etc/openldap/cacerts 中查找其受信任 CA 证书的存储,但显然没有设置,因此它拒绝了该证书,因为它无法为其构建信任链。如果 ldapsearch 使用 OpenSSL,则需要一个“hashdir”格式的集合(例如由 Red Hat“authconfig”程序生成),或者一个包含受信任证书平面列表的单个文件。此处对“moznss”的引用表明此 ldapsearch 是针对 Mozilla NSS 构建的,在这种情况下,您需要使用“certutil”来创建证书数据库(或者更好的是,将其指向系统 NSS 证书存储,如果有的话)。
在 ldapsearch 运行的系统上,必须有一个有效的证书存储,可能是因为那些 OpenLDAP 包是针对 OpenSSL 构建的(或者也许那里有一个有效的 NSS 样式的存储)。
答案2
如果无法验证 TLS 证书,ldapsearch 会显示“无法联系 LDAP 服务器”。将其添加-d1
到 ldapsearch 命令中,并检查以“TLS:”开头的输出行,以获取有关 TLS 连接是否失败以及失败原因的更多信息。
答案3
解决方案取决于您的安装:
如果你是使用无效证书,你可以强制接受
/etc/openldap/ldap.conf
配置TLS_REQCERT allow
或者
TLS_REQCERT never
如果你是使用有效的证书您的 ldap 安装可能不知道受信任 CA 证书的存储位置(可能取决于您的 OpenSSL 安装)。然后您可以尝试设置它的位置并强制检查
/etc/openldap/ldap.conf
配置TLS_CACERT /etc/openldap/cacert TLS_REQCERT demand
/etc/openldap/cacert
可以是这个路径,也可以位于任何路径。它必须包含您的 CA 的证书链。它可以是包含受信任证书平面列表的单个文件。
注意路径取决于 ldap 提供商。可能是/etc/ldap
这样或/etc/openldap
那样。