对于带有变音符号的密码,针对 LDAP 的 Apache 身份验证失败

Ste*_*cke 7 debian ldap encoding apache-2.2

从 Apache 服务器对 LDAP(Active Directory、Server 2008)进行身份验证时,我在错误日志中收到以下消息:

authentication failure for "/": Password Mismatch
Run Code Online (Sandbox Code Playgroud)

仅当密码包含德语变音符号(ä、ö、ü)时才会发生这种情况。更改密码或尝试使用其他帐户而密码中没有变音符号后,身份验证工作正常。

这是我的配置:

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

我在 Debian (2.6.26-2-686) 下使用 Apache2 (2.2.16-6+squeeze1)。有趣的是,上述配置一直工作到昨天(即使是带有变音符号的密码)而且我没有碰它(我发誓;-))。我已经找到其他人有同样的问题,但没有解决方案。

有没有人知道如何解决问题或简单地下一步做什么来识别错误的模块?

最好的问候,斯蒂芬

Gag*_*arr 3

看来某处发生了编码问题。我无法告诉你它在哪里,但我可以建议如何找到它。

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

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

假设您可以作为用户登录 Windows,那么我们知道#5 不是您的问题。您需要做的是确定您的问题出现在哪里。我的预感是它在步骤 2 或 3 中,但我不能确定。

首先,确保您不使用 https 与 Web 服务器通信,也不使用 ldaps 与 LDAP 服务器通信。(您可能不希望在生产中使用它,但它使生活更轻松)。现在,使用wireshark嗅探两条腿的流量,浏览器-> Apache和Apache -> AD。您在那里看到正确的信息吗?

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

一旦确定了破坏编码的步骤,您就已经知道如何修复它了 90%!