Apache LDAP 인증에 시간이 너무 오래 걸림

Apache LDAP 인증에 시간이 너무 오래 걸림

Active Directory에 LDAP 인증을 제공하도록 apache2.2(CentOS 5.6)를 구성했습니다.

<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가 요청된 사용자로 바인딩을 시도할 때) 사이에 정확히 4분을 표시합니다.

이것은 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/

보시다시피 첫 번째 줄과 두 번째 줄 사이에는 4분이 걸립니다.

어떤 단서가 있나요?

시. 여기 하나 있어요협회Wireshark를 사용하여 표시되는 tcpdump 캡처에. 보시다시피 Active Directory는 즉시 응답합니다. 너무 오래 걸리는 것은 Apache의 바인딩요청입니다(이미지에 강조 표시됨).

답변1

귀하의 LDAP 쿼리가 너무 "일반적"입니다. 너무 많은 정보를 가져오는 것을 피하기 위해 쿼리를 하기 전에 객체 클래스를 제한한다면 어떻게 될까요?

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

ldapsearch를 사용하여 "수동으로" 쿼리하는 경우 동일한 성능 문제가 있습니까? 전임자:

ldapsearch -x -W -D "cn=Administrator,dc=example,dc=com" -h 192.168.56.110 -b "dc=example,dc=com" -LLL "(SAMAccountName=peter)" 
Enter LDAP Password: 

관련 정보