过去几个月我一直在使用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
有什么好主意吗?服务器从工作到现在没有变化,重启没有区别
答案 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。
我记下了我的尝试的一些笔记,希望它将对勇于走这条路的人有所帮助:
我发现自己反复使用“ 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的明智之路。