我尝试在 Zabbix 2.4 上设置 LDAPS 身份验证,但不起作用。以下是我的配置信息:
- 操作系统:Debian
安装的PHP包:
libapache2-mod-php5 php-pear php5 php5-cli php5-common php5-curl php5-gd php5-imagick php5-json php5-ldap php5-mysqlnd php5-pgsql php5-readline php5-sasl zabbix-frontend-php
该命令有效:
ldapsearch -H ldaps://ldaps.mptest.be:636 -D cn=reader,dc=antidot,dc=prv -W -b ou=people,dc=antidot,dc=prv
zabbix 上的身份验证 LDAP 设置页面中的相同 URI、OU、登录名、密码,我有这些:
ldap_bind():无法绑定到服务器:无法联系 LDAP 服务器
[authentication.php:120 → CLdapAuthValidator->validate() → CLdap->checkPass() → ldap_bind() 位于 /usr/share/zabbix/include/classes/ldap/CLdap.php:112] LDAP:无法通过给定的绑定 DN 进行绑定。登录名或密码不正确!
以下是/etc/ldap/ldap.conf的内容:
TLS_REQCERT allow BASE dc=antidot,dc=prv URI ldaps://ldap.mptest.be TLS_CACERTDIR /etc/ssl/mptest/wildcard_mptest_be.ca
(没有 SSL 的身份验证,在端口 386 上是无法实现的)
答案1
这是在 Ubuntu 14.04 上运行的。基于 Debian 的系统应该相同:
答案2
我通过访问 Zabbix Web 界面解决了这个问题,然后转到行政->验证->LDAP并改变LDAP 主机参数从主机名(例如ldap.example.com
)转换为其 IP 地址(例如10.6.10.10
)。
答案3
坦白说,PHP 的 LDAP 简直是垃圾。前段时间我也曾为 Zabbix 和 LDAPS 而苦恼。即使你把所有事情都做得 100% 正确,它仍然会失败。所以,不用担心,这里的问题不在你这边。
要使其正常工作,您必须禁用 OpenLDAP 中的 TLS/SSL 证书验证。PHP 的 LDAP 使用 OpenLDAP 库,因此/etc/openldap/ldap.conf
或~/.ldaprc
已加载并起作用。(可以使用示例 PHP LDAP 查询并使用 运行它来查看strace -e trace=open php example.php
)。这里的问题似乎位于 PHP 对 OpenLDAP 库的使用方面,一些缺失/错误/未实现的成功 TLS 证书验证调用。修复该问题需要修补 PHP。
TLS_REQCERT never
应该是实现该功能所需的参数。ldap.conf 中的 URL 和 OU/DC 设置应该不相关,因为它们是由 Zabbix 配置提供的。我强烈建议在~/.ldaprc
您的 Web 服务器主目录中修改它,以免影响使用 LDAPS 的任何其他应用程序。
这个解决方案并不好,但仍然比回退到未加密的 LDAP 要好。为了澄清起见,我尝试手动放置 OpenLDAP 的 CACerts,重新生成证书缓存并设置TLS_REQCERT
为always
。使用 eg(使用与 PHP 相同的库)时,此方法运行良好ldapsearch
,但 PHP 的 LDAP 功能仍然失败。所以这次尝试很可能是浪费时间。我没有尝试放置客户端证书并使用TLS_KEY/TLS_CERT
@jouflux 的答案中指示的方法。如果可行,那将是一个更好的解决方案。