当我尝试使用 连接到任何 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
即使在弱网中也能正常工作。所以解决方法是我们应该用 进行编译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-dev
libcurl4-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
答案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。