![Ubuntu 12.04 LDAP SSL 自签名证书不被接受](https://linux22.com/image/587178/Ubuntu%2012.04%20LDAP%20SSL%20%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%E4%B8%8D%E8%A2%AB%E6%8E%A5%E5%8F%97.png)
我正在使用 Ubuntu 12.04,使用 OpenLDAP 服务器。我已遵循Ubuntu 帮助页面上的说明并且可以顺利地进行连接而无需安全保护。为了测试我的连接,我使用ldapsearch
以下命令:
ldapsearch -xv -H ldap://ldap.[my host].local -b dc=[my domain],dc=local -d8 -ZZ
我也用过:
ldapsearch -xv -H ldaps://ldap.[my host].local -b dc=[my domain],dc=local -d8
据我所知,我已经正确设置了我的证书,但无论我如何尝试,我似乎都无法ldapsearch
接受我的自签名证书。
到目前为止,我已经尝试过:
- 更新我的
/etc/ldap/ldap.conf
文件如下:
BASE dc=[my domain],dc=local URI ldaps://ldap.[my host].local TLS_CACERT /etc/ssl/certs/cacert.crt TLS_REQCERT allow
- 更新我的
/etc/ldap.conf
文件如下:
base dc=[my domain],dc=local uri ldapi:///ldap.[my host].local uri ldaps:///ldap.[my host].local ldap_version 3 ssl start_tls ssl on tls_checkpeer no TLS_REQCERT allow
更新我的
/etc/default/slapd
以包括:SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
经过几个小时的谷歌搜索,大部分结果都是添加了
TLS_REQCERT allow
我看到的确切错误是:
ldap_initialize( ldap://ldap.[my host].local )
request done: ld 0x20038710 msgid 1
TLS certificate verification: Error, self signed certificate in certificate chain
TLS: can't connect.
ldap_start_tls: Connect error (-11)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
经过几个小时的等待,我希望其他人也看到了这个问题,并且/或者知道如何修复它。如果我需要添加更多信息,或者您需要更多数据,请告诉我。
答案1
问题是 Ubuntu 12.04 附带的 GnuTLS 版本使用了有缺陷的加密后端。
GnuTLS 原本应该从使用 gcrypt 作为加密后端切换到 nettle,但存在许可问题。具体来说,一些 GPL 许可证允许与 GPL 的新版本或旧版本链接,而有些则不允许。
您可以从配置了 nettle 的源代码重建 GnuTLS,或者按照 Howard Chu 建议的方式破解 gcrypt。前者的说明位于此错误报告中。
答案2
将变量设置LDAPTLS_REQCERT
为never
忽略服务器上可能已过期或无效的证书,即:
LDAPTLS_REQCERT=never ldapsearch -D "cn=drupal-test,ou=Services,dc=example,dc=com" -w my_pass -h ldap.example.com -b "ou=People,dc=example,dc=com" -s sub -x -ZZ "(uid=admin)"
或者检查服务器是否具有正确的证书。
答案3
在运行 ldapsearch 的客户端计算机上,您必须在 ldap.conf 中
TLS_CACERT /etc/ssl/certs/cacert.crt
我从您的服务器配置中复制了您存储 CA 证书的路径。将 CA 证书从服务器复制到与该路径相同的客户端位置。
答案4
遇到了同样的问题,我的失败原因是在 12.04 上使用 LDAP(slapd 包是用 GNUTLS 构建的)以及使用 openssl(使用 CA.pl 脚本)创建的证书
解决方案:通过 GNUTLS 的 certtool 重新创建自签名证书,然后我的带有 TLS 的 LDAP 就可以工作了。