将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。
build议的SVN更改:
对命令启用Verbosity就像所有操作一样
将错误ENUM名称添加到标准错误
为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。)