Github无法访问SSL连接错误

时间:2018-02-22 22:38:43

标签: ssl github

过去几个月我一直在使用git lot。 git push工作12小时前现在所有尝试都会产生错误,详细信息会产生错误:

GIT_CURL_VERBOSE=1 git push
* Couldn't find host github.com in the .netrc file; using defaults
* About to connect() to github.com port 443 (#0)
* Trying 192.30.253.112... * Connected to github.com (192.30.253.112) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
   CApath: none
* NSS error -12190
* Expire cleared
* Closing connection #0
fatal: unable to access 'https://github.com/waveney/wmff/': SSL connect error

有什么好主意吗?服务器从工作到现在没有变化,重启没有区别

4 个答案:

答案 0 :(得分:108)

我在各种CentOS 6虚拟机上遇到了同样的问题,结果证明这是一个陈旧的curl和nss库的问题(感谢这个线程指向我正确的方向:cURL SSL connect error 35 with NSS error -5961 )。

对我有用的修复只是:

yum update -y nss curl libcurl

答案 1 :(得分:0)

我在rhel 6上遇到了同样的问题。在模块加载curl / 7.50.3之后,问题就消失了。

答案 2 :(得分:0)

yum update -y为我工作,修复了运行git clone时出现的致命错误。

答案 3 :(得分:0)

具有与OP相同的体验,发生的原因相同(Github删除了TlsV1的加密通知,以及使用具有非常旧的linux + git的计算机)。

FWIW,如果您发现自己使用的是非常旧的linux版本,但固执己见,则不想升级到较新的linux版本(因此会立即获得较新的Git及其所有功能),可以尝试构建一个更新的Git以及其来自源的依赖项。

这是一条耗时且痛苦的道路,也许升级您的linux比这更容易,但是,哦,我只是想坚持使用我的旧linux。

我记下了我的尝试的一些笔记,希望它将对勇于走这条路的人有所帮助:

  • Git依赖于openssl和curl,所以我也必须构建它们
  • 我必须升级cmake的版本才能构建更新的卷发(构建cmake大约需要2-3个小时)
  • 较新的cmake要求我构建较新的gcc(在旧计算机上构建大约需要21个小时!)
  • 一旦有了cmake,我就可以建立curl了,但是它引用了opensl的​​旧版本(它没有较新的TlsV1.2)
  • 所以我必须先构建一个较新的openssl,然后再构建curl(尽最大努力确保该构建引用了此较新的openssl)
  • 然后我可以再次构建Git,并尽最大努力确保它引用了较新的openssl和curl

我发现自己反复使用“ ldd”来确认所引用的库,因为在许多情况下,该版本会引用错误的库,因此我必须弄清楚如何执行所需的路径。

一些例子是:

# ldd /opt/git-2.27.0/libexec/git-core/git-http-fetch | grep -E "libssl|libcrypto|libcurl"
        libcurl.so => /usr/local/lib/libcurl.so (0x00aed000)
        libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00e86000)
        libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00893000)

这帮助我确认'git-http-fetch“正在使用我的较新curl(在/ usr / local / lib,而不是/ usr / lib),以及我的较新的openssl(在/ usr / local / ssl) / lib,而不是/ usr / lib)

$ ldd /usr/local/bin/curl | grep -E "libssl|libcrypto"
        libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00110000)
        libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x0016f000)

这有助于我确认我的新“ curl”正在引用较新的openssl(位于/ usr / local / ssl / lib,而不是/ usr / lib)

要强制执行这些路径,Git允许您在构建之前设置以下env-vars:

OPENSSLDIR=/usr/local/ssl/
CURLDIR=/usr/local/

对于卷曲,我必须通过cmake通过openssl路径:

cmake -DOPENSSL_ROOT_DIR=/usr/local/ssl .

对于cmake,它也引用了openssl,我在“引导”步骤中通过了该路径:

./bootstrap --prefix=/opt/cmake-3.17.3 -- -DOPENSSL_ROOT_DIR=/usr/local/ssl

道歉到处都是。如果有要求,我可以更详细地介绍它,但是考虑到它花了我大约一周的时间来解决,我认为大多数人会更喜欢只升级Linux的明智之路。

相关问题