连接到https服务器时出现“error:gnutls_handshake()失败”
当我尝试使用git
连接到任何HTTPS服务器时,它会出现以下错误:
error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing ... fatal: HTTP request failed
我想也许有些与gnutls_handshake
相关的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-openssl-dev
替换libcurl4-gnutls-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证书是自签名的。 试一试
git config --global http.sslVerify false