我一直在使用git一段时间没有问题,然后突然在使用git push
时开始抛出此错误:
错误:gnutls_handshake()失败:收到了一个意外长度的TLS数据包。在访问时...... 致命:HTTP请求失败
工作正常,然后突然停了下来。
有什么问题?
由于
答案 0 :(得分:3)
gnutls
包似乎存在问题。作为解决方法,您可以尝试使用git
编译openssl
。有关如何完成此操作的更多信息,您可以找到here。
答案 1 :(得分:1)
关于askubuntu的链接讨论引用了可能与您自己不匹配的git的版本号。而不是这两行:
sudo dpkg-source -x git_1.7.9.5-1.dsc
cd git_1.7.9.5 8.
您需要考虑您正在使用的git版本。就我而言,它是1.8.xxxxx。
sudo dpkg-source -x git_<git-version-number>.dsc
cd git_<git-version-number>
解决此问题的一种简单方法是复制命令的第一部分,然后按Tab键自动完成。如果您之前已经重新编译过,这可能无法正常工作。
答案 2 :(得分:0)
在我的情况下,同样的错误是由完全不同的事情造成的。
Debian从Wheezy升级到Jessie,因此apache升级到2.2.22到2.4.10。 git试图推送到 https://www.example.com ,它停止使用error: gnutls_handshake() failed: A TLS packet with unexpected length was received
事实证明, www.example.com 正在解析IPv4和IPv6地址,而apache配置只有<Virtualhost x.y.w.z:443>
个IPv4地址。将其更改为<Virtualhost _default_:443>
可解决问题。
(正好如果它能帮助其他人有同样的问题......只有在使用openssl进行繁琐的git重新编译之后才能找到它)
答案 3 :(得分:0)
This answer可能有所帮助。我很惊讶这些问题无处可归,尽管问题已经过去了。
为了确保有用的信息不会丢失,我从问题中复制一个简短的解决方案:
hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`
sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $trust_cert_file_location"
答案 4 :(得分:0)