Windows上的Git由于" SSL协议而无法使用远程协议"错误

时间:2015-05-11 15:54:30

标签: windows git curl github msysgit

TL;博士

Windows上的Git因为神秘的" SSL协议而停止连接到github"错误。 HALP!

问题

我在Windows上开发,使用私有GitHub仓库进行源代码管理。当我第一次启动系统时,我能够毫无问题地访问远程仓库 - pullpushfetch等等。一切正常。

经过一段时间(*),此操作停止,我收到以下错误:

  

致命:无法访问' https://github.com/our-team/private-repo.git/':与github.com:443相关的未知SSL协议错误

(*)时间似乎是变化的 - 我见证了一到两个小时,直到一整天。通常在从系统休眠回来后,这似乎是一个问题,但我不知道它是由时间延迟还是由系统睡眠引起的。

通过cURL检查,我得到了

λ curl -v "https://github.com/our-team/private-repo.git/"
*   Trying 192.30.252.130...
* Connected to github.com (192.30.252.130) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
  CApath: none
* TLSv1.0, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to github.com:443
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to github.com:443

set GIT_CURL_VERBOSE=1git pull一起使用会显示类似的信息。有时它会成功(见下文),但大部分时间都会失败。

进一步说明

它有点零星的性质 - 有时我可以获得成功的请求,但一旦它开始爆炸,它通常会破坏10个请求中的9个或更多。

成功的cURL请求如下:

λ curl -v "https://github.com/our-team/private-repo.git/"
*   Trying 192.30.252.130...
* Connected to github.com (192.30.252.130) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
  CApath: none
* TLSv1.0, TLS handshake, Client hello (1):
* TLSv1.0, TLS handshake, Server hello (2):
* TLSv1.0, TLS handshake, CERT (11):
* TLSv1.0, TLS handshake, Server finished (14):
* TLSv1.0, TLS handshake, Client key exchange (16):
* TLSv1.0, TLS change cipher, Client hello (1):
* TLSv1.0, TLS handshake, Finished (20):
* TLSv1.0, TLS change cipher, Client hello (1):
* TLSv1.0, TLS handshake, Finished (20):
* SSL connection using TLSv1.0 / AES128-SHA
* Server certificate:
*        subject: businessCategory=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.3.6.1.4.1.311.60.2.1.2=Delaware; serialNumber=5157550; street=548 4th Street; postalCode=94107; C=US; ST=California; L=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2014-04-08 00:00:00 GMT
*        expire date: 2016-04-12 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 Extended Validation Server CA
*        SSL certificate verify ok.
> GET /our-team/private-repo.git/ HTTP/1.1
> User-Agent: curl/7.41.0
> Host: github.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: GitHub.com
< Date: Mon, 11 May 2015 15:19:43 GMT
< Content-Type: text/html
< Content-Length: 178
< Location: https://github.com/our-team/private-repo/
< Vary: Accept-Encoding
< X-Served-By: 76f8aa18dab86a06db6e70a0421dc28c
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host github.com left intact

问题

我试图找到这个(在几个星期的过程中,所以我没有链接),但是大多数建议似乎都指向证书错误或OpenSSL版本不匹配/错误(不像这个AFAIK那样是零星的)。

可能导致此故障的原因,我该如何解决?

相关软件:

λ git --version
git version 1.9.5.msysgit.1

λ curl --version
curl 7.41.0 (i386-pc-win32) libcurl/7.41.0 OpenSSL/0.9.8zf zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz

2 个答案:

答案 0 :(得分:5)

奇怪的是,事实证明问题在于笔记本电脑因电源供应不足而受到限制。我使用的扩展坞插入了一个低功放电源(3.3 A),虽然它与笔记本电脑兼容,但它立即将其踢入严重节流模式。

显然,这使得一切都放慢了,以至于SSL握手无法足够快地完成。

我们最终在阅读了讨论缓慢问题的戴尔支持论坛帖子(http://en.community.dell.com/support-forums/laptop/f/3518/t/19363340)后对其进行了追踪。解决方案是改变电源。

我也经历过这种缓慢,但我不认为这是相关的。我们换了一个用于扩展坞的高功放电源,一切都很好了,上面描述的SSL错误消失了。

答案 1 :(得分:3)

这似乎是Logjam attack -- weakdh.org --之后采取的安全举措可能导致的错误 这导致了suppression of some ciphers accepted in a SSL/TLS transaction

请注意,正如&#34; Cannot communicate securely with peer: no common encryption algorithm(s)&#34;中所述,您可以通过 git传递正确的密码列表来卷曲

在此之前,您还可以尝试使用更新的Git for Windows(例如Git 2.4.1

时问题是否仍然存在