2011-10-14 59 views
11

我在一个centos发行版上创建了我自己的git服务器。 我可以在家中通过git协议联系服务器。但是当我尝试通过https访问办公室时,我获得:通过https:例程git麻烦:SSL23_GET_SERVER_HELLO

Cloning into /Users/vito/Documents/... error: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112) while accessing https://[email protected]/vitorepo.git/info/refs

fatal: HTTP request failed

问题在哪里?在我的服务器上还是在我的办公室mac上?

+0

您的git服务器是否可以在您的家庭子网之外实际使用?你可以说,从工作中顺利通过SSH? –

+0

是的。我的服务器是一个打开所有有用端口的公共服务器。 – Vito

回答

3

看起来,这是旧版OpenSSL(0.9.8)充当客户端和最近OpenSSL版本(1.0.0)之间的兼容性问题,充当服务器,Curl在客户端和Apache上使用某些特定选项在服务器端。

这可能是由于OpenSSL最近的一些安全修复(可能是针对协议降级攻击的一个)。

尝试将客户端上的OpenSSL库版本升级到1.0.0。

参见:

https://sourceforge.net/tracker/?func=detail&atid=100976&aid=3395520&group_id=976

1

我相信这是一个主机名的服务器上的匹配问题。错误1112是SSL_R_TLSV1_UNRECOGNIZED_NAME,来自SNI名称不匹配(info on SNI)。我有相同的issue in curl

对我来说,解决方法是确保我在客户端上使用的名称与服务器上的ServerName或ServerAlias配置中的一个匹配。当然,这些命令是针对apache服务器的;我不知道你需要为git服务器做什么。但我怀疑你在家和工作中使用的服务器名称是不同的,家庭名称是git服务器正在使用的名称(因此SNI正在工作)。

'真正的'修复可能会在git中进行客户端更改,以允许忽略名称不匹配警告(您的浏览器已经这样做)的方式。

7

当试图连接运行openssl 1.0.0e的ubuntu实例时,我得到了与curl完全相同的响应。我通过向curl命令添加-ssl3标志成功解决了该问题。

+0

你先生是个天才。我不得不从os x做到这一点。你能解释为什么这个工作吗? –

2

如果任何人对XMLRPC有这个问题。

Daniel的答案(强制SSL版本3)解决了我的问题。只需在clientXmlTransport_curl选项(C++)中指定XMLRPC_SSLVERSION_SSLv3即可。

问题出现在我们将服务器升级到OpenSSL版本1.0.1-4ubuntu5.5并且客户端仍在运行0.9.8o-5ubuntu1.7时。

1

不知道我是否有完全相同的问题,但错误消息是相同的。它似乎只发生在我设置git服务器的ubuntu盒子上,出于某种原因,配置了git服务器的centos盒子没有问题。

我只是在3或4天后解决它。事实证明,因为git的底层Curl库有一个错误的Keep-alive实现(我最终转储HTTP流量并手动验证行为)。

简而言之,Curl(至少在我能找到的每个Git实现中使用的版本,包括命令行git和eclipse的EGit)似乎都不正确地解释Connection响应头,或者更正确地看起来不正确正确地解释它的缺席。

要解决这个问题,你需要在apache中配置SSL虚拟主机,它为你的GIT存储库提供了一个专门用于git的额外指令。在</VirtualHost >之前添加这些行。

BrowserMatch "git" nokeepalive ssl-unclean-shutdown 

您可惜不能告诉Apache刚刚降级到HTTP/1.0(将清洁剂),因为卷曲不能处理这个问题,但你可以告诉它强制连接:关闭在每次请求其Curl知道如何处理。

在一个误导性的巧合中,如果您尝试直接测试Curl而没有发生这种变化,它似乎会起作用,因为它会发出一个请求然后中止。只有通过让curl在ssl上对同一个保持连接执行两个请求,这个问题才会变得明显。

0

我有同样的错误。根本原因似乎是客户端/服务器openssl版本不兼容。 我用apt-get upgrade openssl升级了我的服务器并升级了我的windows git安装。

窗口的组合的Git客户端 git version 1.9.4.msysgit.0,其中包含OpenSSL的版本: OpenSSL 0.9.8e 23 Feb 2007

和服务器使用OpenSSL版本: OpenSSL 1.0.1c 10 May 2012

似乎很好地工作在一起。