在我们的网络中,我们有一台运行 Subversion Edge 服务器的服务器。我已将 Edge 配置为在端口 8443 上使用 SSL。我们一直通过 Tortoise SVN 等客户端顺利连接到 SVN,无论是在网络内还是通过公共 IP 地址远程连接。Edge 使用的 SSL 证书只是它自己生成的证书,即自签名证书。
我们在网络中安装了 TeamCity,它能够毫无问题地连接到 Edge SVN 存储库。
我们还在外部位置安装了 TeamCity,但是在外部位置 TeamCity 不会连接到 SVN,它会响应错误:
我们知道外部位置的网络使用代理,但我们修改了服务器文件,指定了代理详细信息,即:
[全局] http-proxy-exceptions = localhost http-proxy-host = ourproxy http-proxy-port = 8080
在我们修改代理设置之前,当我们尝试通过 TeamCity 连接到 SVN 存储库时,出现错误:
jetbrains.buildServer.vcs.VcsRootVcsException:svn:E175002:服务器拒绝连接 svn:E175002:'/svn/TheWebsite' 上的 OPTIONS 请求失败
修改代理设置后,错误如下:
jetbrains.buildServer.vcs.VcsRootVcsException:svn:E175002:握手警报:unrecognized_name svn:E175002:‘/svn/TheWebsite’上的 OPTIONS 请求失败
首先,我认为错误可能表明与授权有关。因此,我关闭了 SVN Edge Server 上的 SSL,外部 TeamCity 能够通过 HTTP 连接,没有任何问题。这让我相信,无论对错,它都与 SSL 证书有关。我们 SVN Edge 服务器上的 SSL 证书是自签名的,并颁发给 svnedge.collab.net,这当然与我们的外部 URL 不匹配。
所以我的问题是,是否有人从经验中知道“握手警报”错误是因为 a) 代理正在剥离凭据还是 b) teamcity 抱怨认证中的通用名称 (svnedge.collab.net) 与我们的存储库的 URL 不匹配?这篇文章,http://www.webapper.com/blog/index.php/2007/02/09/troubleshooting-javaxnetsslsslhandshakeexception/,似乎表明通用名称不匹配会引发此错误。
任何帮助或建议都将不胜感激。
问候,dotdev
答案1
我在 TeamCity 实例上进行 Java 升级后解决了这个问题,方法是根据给出的最佳答案设置 jsse.enableSNIExtension 属性https://stackoverflow.com/questions/7615645/ssl-handshake-alert-unrecognized-name-error-since-upgrade-to-java-1-7-0
正确的方法取决于你运行的 TC 版本,如http://confluence.jetbrains.com/display/TCD8/Configuring+TeamCity+Server+Startup+Properties#ConfiguringTeamCityServerStartupProperties-ServerisRunViaShellScript
答案2
我遇到了类似的问题,jsse.enableSNIExtension=false 无法解决。问题要简单得多:
我的 svn 密码包含几个特殊字符,我猜浏览器可能误解了这些字符。无论如何,将密码更改为仅包含普通字母和数字的密码解决了这个问题