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

Nya*_*baa 68 git

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

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

我想可能是一些相关的包gnutls_handshake被破坏了。所以,我想重新安装那些。

哪些包可能与这些错误有关?或者我该如何解决这种错误?

Nya*_*baa 98

得到问题的原因,它是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
Run Code Online (Sandbox Code Playgroud)

(记得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
Run Code Online (Sandbox Code Playgroud)

安装新包:

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

  • 构建步骤中的测试需要很长时间。如果您信任 git 维护者,我强烈建议按照上面的说明通过从 debian/rules 中删除 TEST=test 行来跳过它们。 (4认同)
  • 用于人们(主要是我自己的)理智的 Shellscript。https://github.com/SonOfLysander/git-openssl-shellscript/blob/master/git-openssl.sh (3认同)
  • 升级到 Ubuntu 14.04 后遇到了同样的问题。这个解决方案效果很好! (2认同)

Ric*_*ick 9

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

git config --global http.sslVerify false

  • 这是一个可怕的想法;它禁用了由 `git` 建立的 _every_ TLS (SSL) 连接的 _all_ 身份验证,从而消除了对中间人攻击的保护。 (16认同)