apache ldap 身份验证耗时太长

apache ldap 身份验证耗时太长

我配置了 apache2.2(CentOS 5.6)来使用 Active Directory 提供 ldap 身份验证。

<Directory "/var/www/html">

        AuthType Basic
        AuthName "Authenticate with domain account."
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative on
        AuthLDAPBindDN cn=Administrator,cn=users,dc=example,dc=com
        AuthLDAPBindPassword secret
        AuthLDAPURL ldap://192.168.56.110:389/dc=example,dc=com?sAMAccountName?sub?(objectClass=*)
        Require valid-user
        ...
</Directory>

它可以工作,但耗时太长。我用 tcpdump 分析了流量。时间戳显示 searchResEntry(当 Active Directory 使用我尝试登录的用户帐户的 DN 进行响应时)和 bindRequest(当 apache 尝试绑定为请求的用户时)之间正好有四分钟。

以下是 error_log 的输出:

[Sat Dec 10 07:06:37 2011] [debug] mod_authnz_ldap.c(390): [client 192.168.56.1] [2488] auth_ldap authenticate: using URL ldap://192.168.56.110:389/dc=example,dc=com?sAMAccountName?sub?(objectClass=*)

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(489): [client 192.168.56.1] [2488] auth_ldap authenticate: accepting peter

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(971): [client 192.168.56.1] [2488] auth_ldap authorise: declining to authorise

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(390): [client 192.168.56.1] [2475] auth_ldap authenticate: using URL ldap://192.168.56.110:389 dc=example,dc=com?sAMAccountName?sub?(objectClass=*), referer: http://192.168.56.200/projeto/

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(489): [client 192.168.56.1] [2475] auth_ldap authenticate: accepting peter, referer: http://192.168.56.200/projeto/

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(971): [client 192.168.56.1] [2475] auth_ldap authorise: declining to authorise, referer: http://192.168.56.200/projeto/

[Sat Dec 10 07:10:37 2011] [error] [client 192.168.56.1] File does not exist: /var/www/html/projeto/style.css, referer: http://192.168.56.200/projeto/

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(390): [client 192.168.56.1] [2475] auth_ldap authenticate: using URL ldap://192.168.56.110:389/dc=example,dc=com?sAMAccountName?sub?(objectClass=*), referer: http://192.168.56.200/projeto/

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(489): [client 192.168.56.1] [2475] auth_ldap authenticate: accepting peter, referer: http://192.168.56.200/projeto/

[Sat Dec 10 07:10:37 2011] [debug] mod_authnz_ldap.c(971): [client 192.168.56.1] [2475] auth_ldap authorise: declining to authorise, referer: http://192.168.56.200/projeto/

如你所见,第一行和第二行之间间隔了四分钟。

有什么线索吗?

附言:这是关联到使用 wireshark 显示的 tcpdump 捕获。如您所见,Active Directory 立即响应。耗时太长的是来自 apache 的 bindRequest(在图像中突出显示)。

答案1

我猜是你的 ldap 查询,你是否尝试过使用 ldap-search 直接从命令行运行该查询

从过滤器的外观来看:

ldap://192.168.56.110:389/dc=example,dc=com?sAMAccountName?sub?(objectClass=*)

这是一个非常广泛的搜索,它实际上做的是从基础搜索dc=example,dc=com每条记录,看它是否有一个名为的属性sAMAccountName,这取决于你在那棵树上有多少个条目,这可能需要一些时间

你最好将其更改为类似以下内容:

ldap://192.168.56.110:389/ou=People,dc=example,dc=com?sAMAccountName?one?(objectClass=*)

但请先使用 ldap-search 实用程序验证您的结果

相关内容