连接到https服务器时出现“错误:gnutls_handshake()失败”


62

当我尝试使用连接到任何HTTPS服务器时git,出现以下错误:

error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing ...
fatal: HTTP request failed

我认为可能某些与之相关的软件包gnutls_handshake已损坏。所以,我想重新安装那些。

哪些软件包可能与这些错误有关?或者如何解决这种错误?


2
另一个问题可能会有所帮助。
Christopher

1
在我的情况下,这是一个简单的身份验证服务器,在使用Internet之前,我们必须先登录到该服务器。我必须先登录那里,然后错误消失。
萨希尔·辛格

Answers:


93

有问题的原因,这是gnutls包。在代理后面工作很奇怪。但是openssl即使在弱网络中也可以正常工作。所以解决方法是,我们应该编译git使用openssl。为此,请运行以下命令:

sudo apt-get update
sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep git
mkdir ~/git-openssl
cd ~/git-openssl
apt-get source git
dpkg-source -x git_1.7.9.5-1.dsc
cd git-1.7.9.5

(请记住1.7.9.5要用系统中的实际git版本替换。)

然后,编辑debian/control文件(运行命令:gksu gedit debian/control)和替换的所有实例libcurl4-gnutls-devlibcurl4-openssl-dev

然后构建软件包(如果测试失败,则可以TEST=test从文件中删除该行debian/rules):

sudo apt-get install libcurl4-openssl-dev
sudo dpkg-buildpackage -rfakeroot -b

安装新软件包:

i386: sudo dpkg -i ../git_1.7.9.5-1_i386.deb

x86_64: sudo dpkg -i ../git_1.7.9.5-1_amd64.deb


从这里启发:https : //github.com/xmendez/wfuzz/wiki/PyCurlSSLBug


2
升级到Ubuntu 14.04后出现了同样的问题。这个解决方案效果很好!
vertti 2014年

1
使用Linux Mint 16,您必须转到“软件源”并在官方存储库上启用源。在编译之前,还必须卸载libcurl4-gnutls-dev并替换为libcurl4-openssl-dev。
Guillaume Perrot 2014年

1
可能会帮助那些好奇的人。如果您使用“ repo”下载存储库(例如android源代码)并遇到gnutls握手问题,则@Nyambaa的答案有效。回购是一个依赖Git的脚本,因此您应该不错。在我的Ubuntu 14.04
lts

2
人们(主要是我自己)的理智的Shellscript。github.com/SonOfLysander/git-openssl-shellscript/blob/master/…–
保罗·尼尔森·贝克

4
构建步骤中的测试需要很长时间。如果您信任git维护者,我强烈建议您按照上述说明通过从debian / rules中删除TEST = test行来跳过它们。
伊莱·艾伯特

9

对我而言,最终是SSL证书是自签名的。试试这个

git config --global http.sslVerify false


9
那是一个可怕的主意。它会禁用由进行的每个 TLS(SSL)连接的所有身份验证,从而避免您受到中间人攻击。git
Curt J. Sampson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.