错误:gnutls_handshake() 失败的 GIT 存储库
Posted
技术标签:
【中文标题】错误:gnutls_handshake() 失败的 GIT 存储库【英文标题】:error: gnutls_handshake() failed GIT repository 【发布时间】:2012-11-11 12:47:22 【问题描述】:当我尝试克隆 git 存储库时出现以下错误。我也正确配置了 rsa 公钥。
$ git clone https://github.com/blah/blah.git
Initialized empty Git repository in /home/arun/.git/
error: gnutls_handshake() failed: A TLS packet with unexpected length was
received. while accessing https://github.com/blah/blah.git/info/refs
fatal: HTTP request failed
【问题讨论】:
【参考方案1】:它可以用于GnuTLs or pycurl bug
以下是pycurl_7.19.0-4ubuntu3的新方法:
sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/python-pycurl-openssl
cd ~/python-pycurl-openssl
sudo apt-get source python-pycurl
sudo apt-get build-dep python-pycurl
sudo apt-get install libcurl4-openssl-dev
sudo dpkg-source -x pycurl_7.19.0-4ubuntu3.dsc
cd pycurl-7.19.0
# remove the HAVE_CURL_GNUTLS=1 in the following file
sudo vim debian/patches/10_setup.py.dpatch
# remove the HAVE_CURL_GNUTLS=1 in the following file
sudo vim setup.py
# replace all gnutls into openssl in the following file
sudo vim debian/control
sudo dpkg-buildpackage -rfakeroot -b
sudo dpkg -i ../python-pycurl_7.19.0-4ubuntu3_amd64.deb
【讨论】:
感谢分享。在最后一步中,我收到以下错误。你有什么线索吗? $ sudo dpkg -i ../python-pycurl_7.19.0-4ubuntu3_amd64.deb dpkg: 错误处理 ../python-pycurl_7.19.0-4ubuntu3_amd64.deb (--install): 无法访问存档: 没有这样的文件或目录 错误是处理时遇到:../python-pycurl_7.19.0-4ubuntu3_amd64.deb @user1514027 我想这取决于上一步构建的确切.deb
文件名(dpkg-buildpackage
)。您需要查看并搜索生成的实际名称。
我遵循了这个解决方案,偏差包括源文件显示为 pycurl_7.19.0-3.dsc 而不是 pycurl_7.19.0-4ubuntu3.dsc。我还发现有必要不要编辑补丁文件,这样做会导致构建时出现 MD5 失败。
最后,行为没有改变,也许我需要找到一种方法来真正阻止该宏被定义。也许我可以手动更改 setup.py 并停止应用补丁?
编辑了已修补的 setup.py 以删除宏定义,然后删除了已修补的文件并删除了 /debian/patches/00list 中的引用。构建似乎可以工作,但行为仍然没有变化。当。我的证书失败会导致类似的问题吗?【参考方案2】:
我遇到了这个问题,我花了一段时间才找到解决方案。我一直在想我在某个地方遗漏了一个包裹。我不想重新编译 Git,因为我已经在使用最新版本,而且我很确定问题不在于 Git 本身。
我的问题是我的.gitconfig
文件。该问题仅发生在多年来已多次升级的旧 Linux 服务器上。在某些时候,出于某种我不记得的原因,我在 .gitconfig
文件中明确指定了 sslVersion = sslv3
。
当我看到这一点时,灯泡亮了,因为我知道 SSL V3 出于安全考虑已被弃用,并且大多数人应该改用 TLS。例如,参见 RFC 7568,https://www.rfc-editor.org/rfc/rfc7568
所以我的修复涉及从我的~/.gitconfig
文件中删除有问题的sslVersion = sslv3
行,或者更改此:
[httpd]
sslVersion = sslv3
到这里:
[httpd]
sslVersion = tlsv1.2
删除这条线并让 Git/libcurl 协商加密似乎是最好的选择,因为 TLS v1.3 正在开发中,我不想以后再遇到这个问题!
【讨论】:
好建议。有许多 git-config options 可能会导致此类问题,或者可以用作解决方法。【参考方案3】:在我的情况下,我似乎没有使用 pycurl,所以上述解决方案对我不起作用。所做的工作是重建 git-core 修改为使用 openssl 而不是 gnutls。
说明在这里:
https://askubuntu.com/questions/186847/error-gnutls-handshake-falied
我在大多数地方都用“git-core”代替了“git”,.dsc(包信息文件?)出现为 git-core_1.7.0.4-1ubuntu0.2.dsc,而 .deb 包以 git-core_1.7.0.4-1ubuntu0.2_i386.deb 出现。
【讨论】:
【参考方案4】:在我自己的用户没有足够权限的目录中尝试sudo git fetch
时,我遇到了同样的问题。我将存储库移至 /tmp
并继续我的工作。
别忘了/tmp
在重启后会被删除。
【讨论】:
仅在某些系统上【参考方案5】:在我的情况下,混合@Rick 和@m0j0 的解决方案
首先执行这些命令:
git config --global http.sslVerify false
git config --global http.sslVerify true
添加或修改后~/.gitconfig
nano ~/.gitconfig
设置这个:
[httpd]
sslVersion = sslv3
【讨论】:
【参考方案6】:对我来说,最终证明 SSL 证书是自签名的。试试这个
git config --global http.sslVerify false
【讨论】:
永远不要这样做。它会禁用git
曾经建立的每个 TLS 连接的身份验证,从而消除对多种攻击的保护。以上是关于错误:gnutls_handshake() 失败的 GIT 存储库的主要内容,如果未能解决你的问题,请参考以下文章
解决 git 同步错误 gnutls_handshake() failed
解决 git 同步错误 gnutls_handshake() failed
解决 git 同步错误 gnutls_handshake() failed
解决 git 同步错误 gnutls_handshake() failed
解决 git 同步错误 gnutls_handshake() failed
gnutls_handshake() failed: A TLS fatal alert has been received