问题描述
当我尝试使用git
连接到任何HTTPS服务器时,它会出现以下错误:
error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing ...
fatal: HTTP request failed
我认为可能有些与gnutls_handshake
相关的软件包已被破坏。所以,我想重新安装那些。
哪些包可以与这些错误相关?或者我该如何解决这种错误?
最佳解决方法
得到问题的原因,它是gnutls
包。它在代理背后很奇怪。但是openssl
即使在弱网络中也能正常工作。所以解决方法是我们应该用openssl
编译git
。为此,请运行以下命令:
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-dev
实例替换为libcurl4-openssl-dev
。
然后构建软件包(如果测试失败,可以从文件debian/rules
中删除TEST=test
行):
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
次佳解决方法
对我来说,它最终是SSL证书是self-signed。试一试
git config --global http.sslVerify false