突然间,昨天,我的一个Apache服务器无法连接到我的LDAP(AD)服务器。 我有两个站点在该服务器上运行,当用户login到任一站点时,两个站点都使用LDAP来validationAD服务器。 两天前工作正常。 原因不明,截至昨天,它停止工作。 错误日志只说这个:
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创build了一个新的,但不是服务器主机名本身,问题依然存在。 我启用了debugging级别的日志logging。 它显示了与LDAP服务器的完整SSL事务处理,并且直到最后我收到“无法联系LDAP服务器”消息时才显示完成。 我可以从这个服务器的命令行运行ldapsearch,我可以login到它,它也使用LDAP,所以我知道服务器可以连接并查询LDAP / AD服务器。 只有apache不能连接。
谷歌search答案什么都没有,所以我在这里问。 任何人都可以提供洞察这个问题?
这是来自apacheconfiguration的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>
来自httpd服务器/ LDAP客户端的数据包跟踪显示有关CA未知的消息。
TLSv1警报(级别:致命,描述:未知的CA)
我发现并添加了以下选项到我的httpd.conf中:
LDAPVerifyServerCert off
这在CentOS 6下解决了我的问题。CentOS 5 httpd服务器不需要任何修改,并且一直工作,没有选项。
我之前在Windows 2003上遇到类似于AD的问题:我find的解决scheme是不使用完整的DN进行绑定,而是使用user @ domain语法:
AuthLDAPBindDN [email protected]
你有权访问你的LDAP服务器的日志吗? 他们可能有助于解决这个问题。
当包更新导致客户端ldap.conf(通常是/etc/ldap.conf或/etc/openldap/ldap.conf)发生更改并将TLS_REQCERT选项重置为更严格的设置时,我已经看到了这一点。 它可以正确协商SSL,但最终仍然会失败,因为它无法validation受信任根的证书链。
你可能想检查服务器的时钟。 如果时差超过几分钟,身份validation票证将无效。
尽pipe这不是完全的错误信息,但“其他服务器突然出现同样的问题”部分可能表明存在这样的问题。
您需要伪造LDAP CA证书才能使用LDAPS
我有一个类似的问题。 我可以用openssl获得证书,我可以在同一个端口上用ldapsearch通过SSL查询Active Directory。 最后,我更改为Microsoft全球目录端口3268或3269,他们都工作。 Microsoft Windows 2003服务器已经被修补,但是在问题发生之前几天就发生了。
我在所有的服务器上实现了LDAPS,并且遇到了这个问题。 如果恢复为明文LDAP,它会消失吗(不理想,但有助于了解问题的根源)。 如果是这样,我还没有find一个解决scheme,但也许在一起,我们可以隔离authnz_ldap中的错误。
我假设你的命令行实验使用了与你的apacheconfiguration相同的“绑定用户”。 如果没有,你应该检查你是否有正确的当前密码。
在过去,我曾经不得不使用全局目录端口而不是AD域的标准LDAP端口。 我不记得原因。 对于你的url上面的ldaps,这将是端口3269。
这样做的方式是,您的网站需要首先使用绑定用户的凭据连接到AD,然后,一旦build立了连接,就会使用此访问来validation尝试访问您的网站的用户的凭据。
根据您的错误消息,听起来像进程无法连接到AD作为您的绑定用户 (AuthLDAPBindDN)。
确保在Active Directory中未禁用绑定用户帐户 ,并且您指定的密码(AuthLDAPBindPassword)是正确的 。 此外,请确保您的绑定用户具有查找其他用户的必要权限 (在我们的案例中必须是域用户的成员)
我有一个类似的问题,我已经通过运行这个命令来确定:
openssl s_client -connect $ldap_host:636 -state -nbio 2>&1 。 我认为mod_ldap使用下面的openssl,所以这应该是相当一致的debugging。
我将它与另一个我知道工作的SSLencryption服务器进行了比较。 经过适当validation的SSL连接将显示连接到根CA并返回0. SSLvalidation失败将给出一个数字和原因。 您可以使用输出来确定发生了什么问题。
在我的情况下,LDAP服务器证书由使用中级CA证书的 Verisign签名。 OpenSSL无法validation证书,连接被拒绝(“服务器拒绝连接”无效)。
我刚才在RHEL6上遇到了这个问题(“无法联系ldap服务器”),这是openldap变更的结果。 yum已经更新了configuration文件/etc/openldap/ldap.conf,而不是覆盖它(如果是自定义的,在我的情况下不是),它创build了一个ldap.conf.rpmnew文件。
通过ldap.conf复制.rpmnew版本修复了这个问题。
(我不同意closures证书validation是对此的一个答案,它以潜在的危险方式避免了这个问题。)
我设法通过安装在这里find的berkelydb和openldap包来解决这个问题。
不同之处在于,RedHat已经开始将nss而不是openssl到SSL支持。 在这种情况下,这就打破了所有的事情。 安装这些软件包(与openssl链接)解决了这个问题。 只需获取包并运行:
yum install berkeleydb-ltb* openldap-ltb*
然后重新启动Apache,你应该在业务。