我目前有一个设置,用户使用 LDAP 凭据登录网站。这都是内部的,所以我不太关心证书。所以,在我的/etc/openldap/ldap.conf
文件中我有TLS_REQCERT never
。在将其添加到文件之前,我总是收到错误Error Binding to LDAP: TLS: hostname does not match CN in peer certificate
。添加后,一切似乎都运行正常。但是现在我发现一段时间后,可能几小时到一天,登录会再次失败,我会开始收到那个错误。如果我重新启动 apache,一切都会再次正常运行。然后错误再次弹出。是什么原因导致这种情况不断发生?服务器是 CentOS 6.5。
答案1
您必须检查证书的有效性,也许问题与这个错误有关:
概括:
问题描述:
当
TLS_REQCERT=never
服务器证书 之前/之后有效期内。此时,连接失败。所选组件的版本-发布号(如果适用):
openldap-2.4.23-15.el6
openldap-2.4.24-3.fc15
可重复性:
在 slapd 中设置证书以允许 TLS/SSL。证书可能无效(颁发者无效、服务器名称无效等)。
跑步:
LDAPTLS_REQCERT=never ldapsearch -x -ZZ ...
执行将会成功,TLS 将被使用。
将系统时间更改为超出证书有效期。再次运行相同的命令。这次命令将失败。
更新:
您已禁用 OpenLDAP 中的证书检查ldap.conf
(这也应适用于 php-ldap)。
在您的 PHP 代码中添加 ldap_connect 之前的内容:
putenv('LDAPTLS_REQCERT=never');
使用 PHP 绑定到 LDAP 服务器时需要帮助忽略服务器证书
如何解决 PHP 中的 ldap_start_tls()“无法启动 TLS:连接错误”?
更新 2:
另一个问题可能是 apache 服务器没有ldap.conf
正确获取配置文件,请查看描述该问题的链接:
http://php.net/manual/en/function.ldap-connect.php#36156
我希望这有帮助
答案2
这是一次盲目的尝试,所以如果它错了,我很抱歉让你误入歧途。也许你的 ldap 服务用完了可用的文件描述符(每个网络连接消耗一个 FD)。在我的 ldap 服务器上,我提高了默认限制:
OVZ-CentOS65[root@ldap1 ~]# more /etc/security/limits.d/ldap.conf
@ldap soft nofile 100000
@ldap hard nofile 200000
尝试添加此文件(或调整当前可能存在的控制 ldap 用户、组或进程限制的文件)并重新启动 ldap 服务。查看 apache 的症状是否持续存在。