当前位置: 首页>>技术问答>>正文


连接到https服务器时出现“错误: 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包。它在代理背后很奇怪。但是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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1674.html,未经允许,请勿转载。