乌龟SVN:初始连接超时

将Tortoise SVN连接到我的SVN服务器时出现问题。 第一个连接似乎进入超时(SVN挂起约20秒),第二个(自动)尝试立即工作。 即每更新,提交,日志需要一个looong时间,并驱使每个人疯狂…

来自Linux命令行客户端的相同的SVN操作即刻起作用。 通过networking浏览器访问工作也没有任何延迟。

SVN设置如下:SVN服务器运行CentOS 7,Apache 2.4.6和mod_dav_svn 1.7.14。 通过SSL访问已configuration。 身份validation通过Windows Server 2012 R2上的LDAP完成。 客户端(Windows 7 x64)运行Tortoise 1.7.15(x64)。

这是相关的Apacheconfiguration(混淆…):

# Reduce LDAP cache to 30 seconds LDAPCacheTTL 30 LDAPOpCacheTTL 30 <Location /svn> DAV svn SVNParentPath /var/svnrepo SVNListParentPath on AuthName "My Repository" AuthType basic AuthBasicProvider ldap AuthLDAPURL "ldap://dc.mydomain.local/OU=Group of Users,OU=MyOU,DC=MyDomain,DC=local?sAMAccountName?sub?(objectClass=*)" NONE AuthLDAPBindDN "CN=ServiceUser,OU=Group of Users,OU=MyOU,DC=MyDomain,DC=local" AuthLDAPBindPassword "VERYSECRETPASSWORD" # Require ldap group via Microsoft rule "LDAP_MATCHING_RULE_IN_CHAIN" Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=SVN-Group,OU=Group of DomainLocalGroups,OU=MyOU,DC=MyDomain,DC=local </Location> 

启动SVN活动时,Apache日志(ssl_error_log)就像这样启动:

 [Wed Aug 26 07:48:14.560025 2015] [ssl:info] [pid 2310] [client 192.168.1.155:49316] AH01964: Connection to child 0 established (server svnserver.mydomain.local:443) [Wed Aug 26 07:48:14.560563 2015] [ssl:debug] [pid 2310] ssl_engine_kernel.c(1878): [client 192.168.1.155:49316] AH02043: SSL virtual host for servername svnserver.mydomain.local found 

现在SVN似乎挂起(时间戳14秒) – 当模块reqtimeout被启用(我在这种情况下禁用它),Apache会在稍后终止连接。 大约20秒后(第二十六秒的时间戳),活动继续:

 [Wed Aug 26 07:48:36.102214 2015] [ssl:debug] [pid 2310] ssl_engine_kernel.c(224): [client 192.168.1.155:49316] AH02034: Subsequent (No.2) HTTPS request received for child 0 (server svnserver.mydomain.local:443) [Wed Aug 26 07:48:36.102267 2015] [authz_core:debug] [pid 2310] mod_authz_core.c(809): [client 192.168.1.155:49316] AH01626: authorization result of Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=SVN-Group,OU=Group of DomainLocalGroups,OU=MyOU,DC=MyDomain,DC=local: denied (no authenticated user yet) [Wed Aug 26 07:48:36.102275 2015] [authz_core:debug] [pid 2310] mod_authz_core.c(809): [client 192.168.1.155:49316] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet) [Wed Aug 26 07:48:36.102334 2015] [authnz_ldap:debug] [pid 2310] mod_authnz_ldap.c(501): [client 192.168.1.155:49316] AH01691: auth_ldap authenticate: using URL ldap://dc.mydomain.local/OU=Group of Users,OU=MyOU,DC=MyDomain,DC=local?sAMAccountName?sub?(objectClass=*) [Wed Aug 26 07:48:36.147960 2015] [ldap:debug] [pid 2310] util_ldap.c(372): AH01278: LDAP: Setting referrals to On. [Wed Aug 26 07:48:36.154921 2015] [authnz_ldap:debug] [pid 2310] mod_authnz_ldap.c(593): [client 192.168.1.155:49316] AH01697: auth_ldap authenticate: accepting john.doe 

ssl_access_log和ssl_request_log从第二个36开始,第二个14没有logging

对我来说,看起来像龟SVN开始连接,无需凭据或不使用https(?),这导致超时。 第二个连接似乎是使用https,但凭证错误,最后使用正确的凭证连接到Tortoise并validation成功。

有任何想法吗? 第二个14到第二个36之间会发生什么,我怎样才能防止它发生? 😉

谢谢,弗洛里安

更新:我find了一个解决scheme(虽然我不确定是什么原因…):每当我启动Tortoise SVN(或者Windows svn命令行客户端)时,我注意到防火墙上的活动:域控制器试图到达几个服务器,egcroot-servers.net似乎是VERISIGN服务器来检查SSL证书或find新的根证书等(?)。 这是由防火墙阻止,所以DC花时间去通过其替代服务器的列表。

我们正在使用自签名证书,因此我的第一个尝试是通过组策略将我们的CA证书注入到Windows的证书pipe理中。 这工作(至lessSVN没有抱怨未知的CA后删除所有身份validation信息)。 尽pipe如此,20秒延迟仍然存在(而且DC仍然试图达到Verisign)。

最终我尝试了本地SVNconfiguration选项“ssl-authority-files”来静态传递CA证书等等:延迟不见了!

即这导致20秒延迟:

 svn list myrepo 

这不是

 svn list --config-option servers:global:ssl-authority-files=C:\temp\mycertificate.crt myrepo 

这个解决方法需要在每个客户端上进行configuration,但至less这是一个解决scheme,这仍然有点令人伤心。

我不确定在validation证书时Windows正在做什么,也许它正在检查撤销或什么等待超时(因为它无法到达威瑞信和朋友)。 不知道。

问题:在防火墙服务器上的命令行上调用SVN之后,15秒内没有任何可见的事件发生,然后程序退出时出现以下错误:

svn:E170013:无法连接到URL“SVN.REPOSITORY.REDACTED”的存储库

svn:E730054:运行上下文时出错:现有连接被远程主机强制closures。

调查:对上述错误的互联网调查没有发现任何有关的信息。

进程跟踪(procmon)在与SVN服务器的SSL / TLS握手之后显示了连接Akamai(云服务)服务器的尝试。 进程跟踪中未显示服务器的主机名。 反向DNS查询显示a184-51-112-88.deploy.static.akamaitechnologies.com或a184-51-112-80.deploy.static.akamaitechnologies.com作为主机名,IP为184.51.112.88或184.51。 112.80(DNScaching中有2个条目)。

数据包捕获工具(MMA)在SVN服务器的SSL / TLS握手之后显示主机名ctldl.windowsupdate.com的连接尝试。

Windows Crypto API试图连接到Windows Update来检索证书吊销信息(CRL – 证书吊销列表)。 CRL检索的默认超时时间为15秒。 服务器上的身份validation超时时间为10秒; 因为15大于10,这就失败了。

决议:互联网研究揭示了以下内容:(也见底图)

解决scheme1:减lessCRL超时组策略 – >计算机configuration – > Windows设置 – >安全设置 – >公钥策略 – >证书pathvalidation设置 – >networking检索 – 见下图。

https://subversion.open.collab.net/ds/viewMessage.do?dsForumId=4&dsMessageId=470698

support.microsoft.com/en-us/kb/2625048

blogs.technet.com/b/exchange/archive/2010/05/14/3409948.aspx

解决scheme2:打开CRLstream量的防火墙

support.microsoft.com/en-us/kb/2677070

解决scheme3:SVN命令行标志(未testing)

serverfault.com/questions/716845/tortoise-svn-initial-connect-timeout – 备用svn命令行标志解决scheme。

其他信息:debugging这个问题特别困难。 SVN 1.8禁用了对Neon HTTP RA(存储库访问)库的支持,以支持删除客户端debugging日志的Serf库。 [1]另外,返回的SVN错误代码与svn_error_codes.h [2]中给出的string不匹配。此外,SVN错误代码不能轻易映射回ENUM标签,这种情况下,SVN错误代码E170013映射到SVN_ERR_RA_CANNOT_CREATE_SESSION。

  1. stackoverflow.com/questions/8416989/is-it-possible-to-get-svn-client-debug-output
  2. people.apache.org/~brane/svndocs/capi/svn__error__codes_8h.html#ac8784565366c15a28d456c4997963660a044e5248bb3a652768e5eb3105d6f28f
  3. code.google.com/archive/p/serf/issues/172

build议的SVN更改:

  1. 对命令启用Verbosity就像所有操作一样

  2. 将错误ENUM名称添加到标准错误

  3. 为Serf库debugging日志添加configuration标志。

基于trapperjohn的回答:

如果你处于一个没有访问外部(甚至是非自签名)CA的限制环境(通过https访问SVN时访问速度很慢),你可以在C:\Users\<user>\AppData\Roaming\Subversion\servers文件如下:

 ssl-authority-files = C:\<some path>\<intermediate CA>.pem;C:\<some path>\<root CA>.pem 

请注意,您需要指定中间CA和根CA(如果有中间CA)。 (要获得PEM格式的证书,可以使用Firefox。)