针对LDAP的Apache身份validation失败,因为带有元音变音的密码

从Apache服务器对LDAP(Active Directory,Server 2008)进行身份validation时,错误日志中会显示以下消息:

authentication failure for "/": Password Mismatch 

只有当密码包含德文变音符(ä,ö,ü)时才会发生这种情况。 在更改密码或尝试使用不带变音器的其他帐户密码validation工作正常。

这是我的configuration:

 AuthType Basic AuthzLDAPAuthoritative off AuthLDAPURL "ldap://[SERVER]:3268/DC=[DOMAIN]?sAMAccountName?sub?(objectClass=user)" AuthLDAPBindDN "user" AuthLDAPBindPassword "pass" require valid-user 

我在Debian(2.6.26-2-686)下使用Apache2(2.2.16-6 + squeeze1)。 有趣的是,上面的configuration一直工作到昨天(即使是带有元音变音的密码),我没有碰它(我发誓;-))。 我已经find了同样的问题,但没有解决scheme的其他人。

有没有人有一个想法如何解决这个问题,或者干脆旁边可能找出错误的模块呢?

最好的问候,斯蒂芬

    这似乎是在某处发生编码问题。 我不能告诉你它在哪里,但我可以build议如何find它。

    据我了解,有5个地方的编码可能被错误地处理或解释。 这些是:

    1. 浏览器将字符转换为字节发送到Web服务器
    2. Apache理解这些字节来构build密码string
    3. Apache + OpenLDAP将密码string转换为字节发送到LDAP服务器
    4. Active Directory将LDAP绑定请求中的字节转换为可与其密码数据库比较的内容
    5. Active Directory在设置用户密码时将字符转换为字节

    假设你可以作为用户login到Windows,那么我们知道#5不是你的问题。 你需要做的是确定问题出现在哪里。 我的直觉是它在步骤2或3,但我不能确定。

    首先,确保您不是使用https与Web服务器通信,也不是使用ldaps与LDAP服务器通信。 (你可能不希望这样的生产,但它使生活更容易)。 现在,使用wireshark来嗅探两条腿的stream量,浏览器 – > Apache和Apache – > AD。 你在那看到正确的信息吗?

    接下来,在Apache中设置日志级别进行debugging,并查看打印出的内容。 这不会显示你的密码,但在debugging级别,它应该显示你的其他信息,如用户名。 如果您使用包含口音的假用户名,它们是否正确显示?

    一旦你确定了破解编码的步骤,你就知道如何解决这个问题了。