无法弄清楚为什么apache LDAP身份验证失败


8

突然,昨天,我的一台apache服务器无法连接到LDAP(AD)服务器。我在该服务器上运行两个站点,当用户登录到两个站点时,两个站点都使用LDAP对我的AD服务器进行身份验证。前两天一切都很好。由于未知的原因,它从昨天开始停止工作。错误日志仅显示以下内容:

auth_ldap authenticate: user foo authentication failed; URI /FrontPage [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server], referer: http://mysite.com/

我以为我的自签名SSL证书可能已过期,所以我为mysite.com创建了一个新证书,但没有为服务器主机名本身创建了一个新证书,问题仍然存在。我启用了调试级别的日志记录。它显示了与LDAP服务器的完整SSL事务,并且直到我收到“无法联系LDAP服务器”消息的最后为止,它似乎都没有错误地完成了。我可以从此服务器上的命令行运行ldapsearch,也可以使用LDAP登录到它,因此我知道该服务器可以连接并查询LDAP / AD服务器。只有apache无法连接。

谷歌搜索答案什么都没有,所以我在这里问。谁能提供有关这个问题的见解?

这是apache配置中的LDAP部分:

<Directory "/web/wiki/">
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Login"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    #AuthBasicAuthoritative off
    AuthLDAPUrl ldaps://domain.server.ip/dc=full,dc=context,dc=server,dc=name?sAMAccountName?sub
    AuthLDAPBindDN cn=ldapbinduser,cn=Users,dc=full,dc=context,dc=server,dc=name
    AuthLDAPBindPassword password
    require valid-user
</Directory>

有趣的是,我有一台通过LDAP进行身份验证的Apache 2服务器可以正常工作数月,然后就在上周开始出现同样的问题!我无法终生弄清楚它是什么,我已经尝试过各种方法。去看这个问题。
卡米尔·

Answers:


9

来自httpd服务器/ LDAP客户端的数据包跟踪显示了有关CA未知的消息。

TLSv1警报(级别:致命,描述:未知的CA)

我找到了以下选项并将其添加到我的httpd.conf中:

  LDAPVerifyServerCert          off

这解决了我在CentOS 6下的问题。CentOS 5 httpd服务器不需要任何修改,并且一直可以使用该选项。


这个答案给我赢得了啤酒。一位同事遇到了这个问题,我偶然听到了他的声音,抱怨他为什么新创建的Debian服务器无法连接到我们的LDAP服务器。我给他这个链接,他的问题立即得到解决。
dmourati

再加上很多。这个答案真的救了我的皮。
AnrDaemon

2

我在Windows 2003上使用AD之前遇到过类似的问题:我发现的解决方案是不使用完整DN进行绑定,而是使用user @ domain语法:

AuthLDAPBindDN user@domain.com

1

您可以从LDAP服务器访问日志吗?他们可能有助于解决此问题。


LDAP服务器实际上是Windows AD服务器。我检查了事件日志,没有发现任何有用的信息。甚至没有任何迹象表明apache服务器甚至尝试连接。
SethG

您应该验证Apache服务器实际上是在向AD服务器发送LDAP请求。可能是某种原因完全阻止了LDAP请求将其发送到AD服务器。如果您在Windows计算机上具有足够的特权,则可以运行Wireshark来验证LDAP请求实际上正正确地进入AD。如果不是,请检查两台服务器之间的网络和防火墙。您是否在Apache服务器上运行iptables?
Eric Dennis

1

当软件包更新导致客户端ldap.conf(通常是/etc/ldap.conf或/etc/openldap/ldap.conf)发生更改并将TLS_REQCERT选项重置为更严格的设置时,我已经看到了这一点。它可以正确协商SSL,但由于无法从受信任的根验证证书链,因此最终仍会失败。


1

您可能要检查服务器的时钟。如果时间差超过几分钟,则身份验证票证将无效。

尽管这不完全是错误消息,但是“另一台服务器突然遇到相同的问题”部分可能表明存在此类问题。



1

我有一个类似的问题,通过运行以下命令已确定:

openssl s_client -connect $ldap_host:636 -state -nbio 2>&1。我认为mod_ldap在下面使用了openssl,因此这对于调试应该是相当一致的。

我将它与我知道可以正常工作的另一个SSL加密服务器进行了比较。正确验证的SSL连接将显示一条链,该链将转到根CA并返回0。SSL验证失败将给出一个数字和原因。您可以使用输出来确定出了什么问题。

在我的情况下,LDAP服务器证书由Verisign签名,后者使用中间CA证书。OpenSSL无法验证证书,并且连接被拒绝(“服务器拒绝连接”没有帮助)。


1

我有一个类似的问题。我可以使用openssl获取证书,也可以使用ldapsearch在相同端口上通过SSL查询Active Directory。最后,我改用了Microsoft Global Catalog端口3268或3269,它们都可以工作。Microsoft Windows 2003服务器已被修补,但是那是在问题开始发生之前的几天。


0

我在所有服务器上实施LDAPS时也遇到了这个问题。如果您恢复为纯文本LDAP,它会消失吗(不理想,但对了解问题根源很有用)。如果是这样,我还没有找到解决方案,但是也许我们可以一起找出authnz_ldap中的错误。


0

我假设您的命令行实验使用的是与apache配置中相同的“绑定用户”。如果没有,请检查当前密码是否正确。

过去,我曾经不得不使用全局目录端口,而不是用于AD域的标准LDAP端口。我不记得为什么。对于上面URL中的ldap,这将是端口3269。


0

这种工作方式是,您的网站需要首先使用绑定用户的凭据连接到AD ,然后,在建立此连接后,它将使用此访问权限来验证尝试访问您的网站的用户的凭据。

根据您的错误消息,听起来该进程无法以您的绑定用户 (AuthLDAPBindDN)连接到AD 。

确保在Active Directory中禁用绑定用户帐户,并且您指定为(AuthLDAPBindPassword)密码正确。另外,请确保您的绑定用户具有查找其他用户所必需的权限(在本例中必须是“域用户”的成员)


0

我刚在RHEL6上遇到过此问题(“无法联系ldap服务器”),这是对openldap进行更改的结果。yum更新了配置文件/etc/openldap/ldap.conf,但是没有覆盖它(以防万一是自定义的;对于我而言不是),而是创建了ldap.conf.rpmnew文件。

通过ldap.conf复制.rpmnew版本可解决此问题。

(我不同意关闭证书验证是解决此问题的方法。它以潜在危险的方式避免了该问题。)


0

我通过安装berkelydbopenldap此处找到的软件包设法解决了这个问题。

区别在于RedHat已开始链接对象nss而不是opensslSSL支持。在这种情况下,这破坏了所有事情。安装这些软件包(与openssl链接)可解决此问题。只需获取软件包并运行:

yum install berkeleydb-ltb* openldap-ltb*

然后重新启动apache,您应该可以正常工作了。


0

从rhel6.6升级到rhel7.5后,我遇到了相同的问题。当我没主意时,我得出结论说,在Apache 2.2.32上的mod_ssl在rhel7.4上可能不是100%兼容的。我从Apache 2.2.32升级到Apache2.4,启用了SSL,sldap正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.