我在centos发行版上创建了自己的git服务器。
我可以通过家里的git协议联系服务器。但是当我尝试通过https在办公室访问时,我获得:
克隆到/ Users / vito / Documents / ...错误:
错误:14077458:SSL例程:SSL23_GET_SERVER_HELLO:reason(1112)while
访问 HTTPS://gitolite@myserverxyz.com/vitorepo.git/info/refs
致命:HTTP请求失败
哪里有问题?在我的服务器上或我的办公室mac?
尝试连接运行openssl 1.0.0e的ubuntu实例时,我从curl得到了完全相同的响应。我通过添加成功解决了这个问题 -ssl3 标志为curl命令。
似乎是作为客户端的旧版本OpenSSL(0.9.8)与作为服务器的最新OpenSSL版本(1.0.0)之间的兼容性问题,其中客户端和服务器端的Apache使用了一些特定选项。
这可能是由于OpenSSL最近的一些安全修复(可能是针对协议降级攻击的安全修复)。
尝试将客户端的OpenSSL库版本升级到1.0.0。
看到:
https://sourceforge.net/tracker/?func=detail&atid=100976&aid=3395520&group_id=976
万一有人对XMLRPC有这个问题。
Daniel的回答(强制使用SSL版本3)为我解决了这个问题。只需在clientXmlTransport_curl选项(C ++)中指定XMLRPC_SSLVERSION_SSLv3即可。
当我们将服务器升级到OpenSSL版本1.0.1-4ubuntu5.5并且客户端仍在运行0.9.8o-5ubuntu1.7时,问题就出现了。
我相信这是服务器上的主机名匹配问题。错误1112是SSL_R_TLSV1_UNRECOGNIZED_NAME,来自SNI名称不匹配(有关SNI的信息)。我也一样 卷曲问题。
对我来说,解决方法是确保我在客户端上使用的名称与服务器上的ServerName或ServerAlias配置之一匹配。当然,这些命令适用于apache服务器;我不知道你需要为git服务器做些什么。但我怀疑你在家和工作中使用的服务器名称是不同的,并且主页名称是git服务器正在使用的名称(因此SNI正在工作)。
“真正的”修复可能会改变git中的客户端,以便忽略名称不匹配警告(浏览器已经采用的方式)。
不确定我是否有完全相同的问题,但错误信息是相同的。它似乎只发生在我设置了一个git服务器的ubuntu盒子上,出于某种原因,设置了git服务器的centos盒子很好。
我只是在3或4天后解决了它。结果是因为git的底层Curl库有一个破坏的Keep-alive实现(我最终转储了HTTP流量并手动验证了行为)。
简而言之,Curl(至少我可以找到的每个Git实现中使用的版本,包括命令行git和eclipse的EGit)似乎没有正确解释Connection响应头,或者更正确地似乎没有正确解释缺席它
要解决此问题,您需要在为GIT存储库提供服务的apache中配置SSL虚拟主机,并使用专门针对git的额外指令。在</ VirtualHost>之前添加这些行。
BrowserMatch "git" nokeepalive ssl-unclean-shutdown
遗憾的是,你无法告诉apache只是降级到HTTP / 1.0(会更干净),因为Curl无法处理,但你可以告诉它强制连接:关闭Curl确实知道如何处理的每个请求。
在一个误导性的巧合中,如果你尝试直接测试Curl而没有这个改变,它似乎会起作用,因为它只产生一个请求然后中止。只有通过让curl在ssl上的同一个keep-alive连接上执行两个请求才能解决这个问题。
我有同样的错误。根本原因似乎是客户端/服务器openssl版本不兼容。
我已经升级了我的服务器 apt-get upgrade openssl
并升级了我的Windows git安装。
windows git客户端的组合
git version 1.9.4.msysgit.0
,其中包含openssl版本:
OpenSSL 0.9.8e 23 Feb 2007
和openssl版本的服务器:
OpenSSL 1.0.1c 10 May 2012
似乎一起工作很好。