如何通过 LDAP 调试针对活动目录的 SASL 身份验证

如何通过 LDAP 调试针对活动目录的 SASL 身份验证

我正在尝试配置在 Centos 6.5 上运行的 SASL,以允许对企业活动目录服务器进行身份验证。最终目标是验证对该服务器上运行的一些 subversion 存储库的访问,但在此阶段,我只是尝试让 saslauthd 进行身份验证,并使用 testsaslauthd 对其进行测试。

每次验证都会失败,日志中会出现以下内容:

saslauthd[20843] :do_auth         : auth failure: [user=MYUSER] [service=svn] [realm=MYREALM] [mech=ldap] [reason=Unknown]
saslauthd[20843] :do_request      : response: NO

这是我的 /etc/saslauthd.conf:

ldap_auth_method: bind
ldap_servers: ldaps://ldap.ad.mycompany.com:3269/
ldap_bind_dn: MYBINDDN
ldap_password: xxxxxxxxxx
ldap_search_base: DC=mycompany,DC=xx
ldap_filter: (&(cn=%u)(objectClass=person))
ldap_referrals: yes
log_level: 10

请注意,我知道 ldap 服务器 URI、绑定 DN、密码、搜索库和过滤器是正确的,因为我有一个 perl 脚本,它使用这些来对网站执行身份验证,并且它运行良好。该 perl 脚本使用 Net::LDAP,绑定到 AD,使用搜索库和过滤器搜索用户,然后尝试使用用户的 DN 和密码进行绑定。据我所知,这正是 SASL 应该按照我配置的方式尝试执行的操作。

我的第一个观察结果是,尽管将 log_level 设置为 10,但我只收到一行,告诉我失败原因不明。我使用 -d(调试)选项从 shell 启动 saslauthd。我还能做什么来获得更多调试输出?

有什么方法可以记录 LDAP 交互吗?

最后,有人能看出我的配置有什么问题吗?也许是某些 AD 怪癖需要在 SASL 配置中进行特殊设置?

答案1

最后,我无法让 saslauthd 输出任何更好的调试信息,但如果它能帮助其他人,以下是我解决问题所遵循的过程。

首先我使用 strace 启动 saslauthd,如下所示:

# strace -f saslauthd -d -a ldap

然后我可以看到 saslauthd 进行的所有系统调用。看起来好像它在与 AD 服务器的初始交换期间失败了,可能是在 TLS 协商期间。

我决定看看是否可以使用 openldap 提供的命令行 ldapsearch 工具重现类似的行为。我给出了如下命令:

$ ldapsearch -d 9 -H ldaps://ldap.ad.mycompany.com:3269/ -D MYBINDDN -w xxxxxx \
   -b DC=mycompany,DC=xx '(&(cn=myuser)(objectClass=person))'

-d 9 最终给了我一些有用的调试输出:

TLS: certificate [CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US] is not valid - error -8179:Peer's Certificate issuer is not recognized..

阅读 ldap.conf 的手册页后,我发现应该设置 TLS_CACERT 和/或 TLS_CACERTDIR 以指向证书包和文件。我使用的是 Centos 6,它在 /etc/pki/tls/certs/ 中有这些内容,因此我进行了以下设置:

TLS_CACERT    /etc/pki/tls/certs/ca-bundle.crt
TLS_CACERTDIR /etc/pki/tls/certs/

此后,ldapsearch 开始工作,并且重新启动 saslauthd 后,对 AD 服务器的身份验证成功。

答案2

即使使用-d,saslauthd 也不会将调试信息记录到 stdout。相反,它会使用该AUTH工具将调试信息记录到 syslog 中。

相关内容