我有一台 Apache 服务器,其中有一个带有受保护目录的网站。受基本身份验证保护,可防止远程 LDAP 服务器(不在同一台机器上)。
<Location "/mywebapp/myprotected">
AuthzLDAPAuthoritative on
AuthType basic
AuthName "Enter your credentials"
AuthBasicProvider ldap
AuthLDAPURL "ldap://ldap.differentserver.org:3268/dc=company,dc=org?sAMAccountName?sub?(&(objectCategory=*)(objectClass=user))"
Require valid-user
AuthLDAPBindDN 'cn="Adminaccount,OU=Service IDs,OU=Application IDs,OU=Support,OU=Administration,dc=company,dc=org'
AuthLDAPBindPassword adminpassword
</Location>
该装置目前正在运行。所有连接都是纯文本。
我不明白的是,当 apache 服务器与 ldap.differentserver.org 交互时,为什么我在 wireshark 中看不到我的密码。当我在通往 Web 服务器的途中在弹出对话框中输入密码时,我可以看到我的密码,但从 Web 服务器到 ldap 服务器时看不到。我确实看到了 AuthLDAPBindPassword。
在 wireshark 中,我看到的唯一协议是 TCP、DNS、LDAP、HTML。我没有看到任何 TLS 协议消息,因此我假设 LDAP 服务器没有升级到 TLS。
我以纯文本形式看到了有关我的用户名的 LDAP 搜索消息,但我的密码似乎不在任何消息中。
系统是工作 - 我只是想解释一下 LDAP 如何获取我的普通用户密码,因为我没有看到它。
答案1
我找到了。它编码为十六进制字节。
答案2
Ldap 将密码存储为哈希值。(即加密)。无需了解 mod_authz 和 ldap 之间交互的技术细节...Apache 会将您在登录窗口中提供的密码的哈希值与存储在 ldap 中的哈希值进行核对。
顺便说一句:您应该使用 apache 对 https 进行所有身份验证,原因正如您所观察到的:任何人都可以嗅探您的流量并查看您的纯文本密码。