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

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

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

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

我认为可能一些相关的软件包gnutls_handshake已损坏。因此,我想重新安装它们。

哪些软件包与这些错误有关?或者我该如何修复此类错误?

答案1

找到问题的原因了,是gnutls软件包。它在代理后面工作得很奇怪。但openssl即使在弱网中也能正常工作。所以解决方法是我们应该用 进行编译gitopenssl为此,请运行以下命令:

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

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

git config --global http.sslVerify false

答案3

其中一篇提到了这一点对另一个答案的评论但我觉得它需要更加明显https://askubuntu.com/users/177551/paul-nelson-baker编写了一个 shell 脚本,对我来说,它可以解决这个问题。

该脚本可在他的存储库中找到https://github.com/paul-nelson-baker/git-openssl-shellscript并使用 openssl 而不是 gnutls 重新编译 git。阅读 README 了解整个过程,但它对我有用,所以感谢 Paul。

相关内容