我有一个关于我的Subversion服务器安装与Apache(mod_ldap和mod_authnz_ldap)和我的LDAP连接到Microsoft Active Directory的问题我正在使用一个CentOS5 64Bit系统与Collabnet Subversion EDGE。
问题是连接到我的LDAP,因为它需要第一次validation正好30秒。
这里是日志文件片段。
首先使用myLdapUser身份validation:
==> /opt/csvn/data/logs/error_2012_04_24.log <== [Tue Apr 24 10:42:00 2012] [debug] mod_authnz_ldap.c(403): [client xx.xx.xx.xx] [3122] auth_ldap authenticate: using URL ldap://10.10.10.11/DC=mycompany,DC=com?sAMAccountName?sub ==> /opt/csvn/data/logs/access_2012_04_24.log <== xx.xx.xx.xx - myLdapUser [24/Apr/2012:10:42:00 +0200] "GET /svn/ HTTP/1.1" 200 132 ==> /opt/csvn/data/logs/error_2012_04_24.log <== [Tue Apr 24 10:42:30 2012] [debug] mod_authnz_ldap.c(518): [client xx.xx.xx.xx] [3122] auth_ldap authenticate: accepting myLdapUser [Tue Apr 24 10:42:30 2012] [info] [client xx.xx.xx.xx] Access granted: 'myLdapUser' GET (null)
正如您所看到的,使用ldap URL和接受的authentication有30秒的时间间隔。 在第一次缓慢但成功的身份validation之后,我是否重新加载页面,一切都在一秒钟内完成,请参阅此日志文件片段:
==> /opt/csvn/data/logs/access_2012_04_24.log <== xx.xx.xx.xx - myLdapUser [24/Apr/2012:10:42:51 +0200] "GET /svn/ HTTP/1.1" 200 132 ==> /opt/csvn/data/logs/error_2012_04_24.log <== [Tue Apr 24 10:42:51 2012] [debug] mod_authnz_ldap.c(403): [client xx.xx.xx.xx] [3123] auth_ldap authenticate: using URL ldap://10.10.10.11/DC=mycompany,DC=com?sAMAccountName?sub [Tue Apr 24 10:42:51 2012] [debug] mod_authnz_ldap.c(518): [client xx.xx.xx.xx] [3123] auth_ldap authenticate: accepting myLdapUser [Tue Apr 24 10:42:51 2012] [info] [client xx.xx.xx.xx] Access granted: 'myLdapUser' GET (null)
看一下LDAP服务器:首先它绑定成功,然后它执行非常快的search请求,并获得用户'myLdapUser'的完整值的search请求条目,然后,用户还没有被authentication,30秒后,它再次使用search请求条目的用户信息再次呼叫Active Directory,然后接受用户。
任何人都知道发生什么事了吗?
我也在这里发布这个问题,但这不是一个颠覆的问题,它与Apache和mod_ldap有关,所以我想我不会得到帮助: http : //subversion.open.collab.net/ds/viewMessage。怎么办?dsForumId = 3&dsMessageId = 417998
为了完整起见,您应该发布实际的mod_authz_ldapconfiguration指令,而不仅仅是日志片段。 对我来说,这听起来像是Apache和AD之间的DNS问题,但没有更多的信息,我不能确定。
您应该尝试使用CentOS机器上的ldapsearch手动进行身份validation,看看您是否可以在那里重现问题。 就像是:
ldapsearch -xLLLZ -D sAMAccountName=myLdapUSer,dc=mycompany,dc=com -W \ -b dc=mycompany,dc=com -H ldap://10.10.10.11
鉴于我对Active Directory的“LDAP”(我使用这个术语松散)的经验,这可能是一个推介的问题。
默认情况下,当您连接到目录控制器上的端口389时,除了从“directory.ads.example.com”的引用中获得的常规LDAP答案之外。 大多数LDAP客户端(包括Apache)都遵循引用,如果有许多DC(特别是如果它们在地理上分布的话),则可以将LDAP客户端发送到networking中。 我曾经在加拿大蒙特利尔有一个LDAP客户端,经常去我们在澳大利亚悉尼的一个DC。
所以,而不是在你的Apacheconfiguration中有如下的东西:
AuthLDAPURL ldap://mydc1.example.com/dc=example,dc=com?uid?one
这将到389端口,请确保您指定全局编录端口:
AuthLDAPURL ldap://mydc1.example.com:3268/dc=example,dc=com?uid?one
如果你需要SSL,那么就是3269端口。(真的希望MS不会调用他们的服务LDAP,因为它不是很多方法,只是造成混淆。)
PS今后,请习惯于发布configuration文件的相关部分(随意混淆任何用户名,密码和/或域)。
看起来像DNS有问题。 在Apache或LDAP服务器端,某些DNS查询可能会有30秒的超时时间。 我会仔细检查!
我会在networking上做一个数据包嗅探,看看延迟发生的地方。 它应该会告诉你是否需要很长时间才能返回DNS响应,或者LDAP响应缓慢,还是有其他延迟,如DAM所build议的那样,您还没有预料到其他延迟。