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

问题描述

当我尝试使用git连接到任何HTTPS服务器时(例如git clone),它会出现以下错误:

$ git clone https://github.com/xx/x.git
Cloning into 'xx'...
fatal: unable to access 'https://github.com/xx/xx.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.

之前使用搜索到一些文章,说是代理问题,取消即可:

# 如果没有配置代理,可使用以下命令 取消代理 :
git config --global --unset http.proxy
git config --global --unset https.proxy

可是问题仍然存在。

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

我认为可能有些与gnutls_handshake相关的软件包已被破坏;开始怀疑SSL有关的部分。

参考资料:

傻瓜化解决方法

关闭SSL自签名,不需要额外的改动:

git config --global http.sslVerify false

附录:通过重装git解决

得到问题的原因,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

git连接到https服务器时出现“gnutls_handshake() failed”的更多相关文章

  1. 连接到 Linux 服务器时首先要运行的 5 个命令

    作为一个系统管理员/SRE 工作 5 年后,我知道当我连接到一台 Linux 服务器时我首先应该做什么.这里有一系列关于服务器你必须了解的信息,以便你可以(在大部分时间里)更好的调试该服务器. 连上 ...

  2. git clone或者git clone时遇到gnutls_handshake() failed: An unexpected TLS packet was received.如何处理?

    答: 直接将https修改为http即可, 如: $ git clone https://github.com/Jello_Smith/my-example.git ->  git clone ...

  3. 在centos搭建git服务器时,不小心把/home/git目录删除了,我是怎么恢复的

    在centos搭建git服务器时,不小心把/home/git目录删除了,我是怎么恢复的 在删除掉/home/git目录后,每次 git push提交时,都让填写密码,烦 第一步:在本地找到id_rsa ...

  4. PhpStorm 集成 开源中国(oschina.net)的Git项目,提交SVN时注意事项

    第一步:配置 git.exe File -> Default Settings -> Version Control -> Git -> Path go Git executa ...

  5. PhpStorm 9.03 集成 开源中国(oschina.net)的Git项目,提交SVN时注意事项

    第一步:配置 git.exe File -> Default Settings -> Version Control -> Git -> Path go Git executa ...

  6. Git详解之四 服务器上的Git

    以下内容转载自:http://www.open-open.com/lib/view/open1328069988843.html 服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日 ...

  7. 使用 Git 对原理图和线路板时行版本控制

    使用 Git 对原理图和线路板时行版本控制 由于之前一直用 Git 管理代码,我又开始试用 git 来对原理图和线路板时行版本控制. 由于 原理图和 PCB 的文件都是二进制文件,git 管理并不怎么 ...

  8. Nodejs创建HTTPS服务器

    Nodejs创建HTTPS服务器 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Jav ...

  9. 【git】git中使用https和ssh协议的区别以及它们的用法

    git可以使用四种主要的协议来传输资料: 本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 git 协议.其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常 ...

  10. git使用,Git的skil-map,git配置http/https/socks5代理

    . 检出.克隆库: git clone git://git.openwrt.org/openwrt.git 2. git查看某个文件的修改历史 git log --pretty=oneline 文件名 ...

随机推荐

  1. B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能

    B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能 @ 目录 B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa ...

  2. 一键关闭 Win11 系统广告「GitHub 热点速览」

    不知道读者中有多少人早已对 Windows 11 系统自带的广告感到厌烦,却又不知道如何关闭它们? 虽然网上有详细的关闭教程,但是都需要逐一手动操作,不是很方便.所以,今天「GitHub 热点速览」给 ...

  3. go 操作 Excel

    文档地址: https://xuri.me/excelize/zh-hans/ package main import ( "fmt" "github.com/xuri/ ...

  4. SQL如何删除所有字段都相同的重复数据?

    SQL Server数据库:有时候在处理数据时会遇到不加主键的表,导致数据表内出现了一模一样的数据,刚开始第一时间想到的方式是,把两条数据全部删除,然后再插入一条,但是这种可能数据量比较少的话,还可以 ...

  5. python教程2:if...else...+循环

    一.if判断 有单分支.双分支.多分支,下面就是一个多分支的案例: 二.缩进 三.for循环 四.while循环  五.其他 random模块  string模块

  6. 基于 three.js 加载器分别加载模型

    点击查看代码 /** * 参数:模型文件路径,成功回调函数 * * 基于 three.js 加载器分别加载模型 * * 全部加载后通过回调函数传出打印 */ import { FBXLoader } ...

  7. next-route

    在目录结构中,我们精心创建的每一个文件最终都会经过处理,转化为相应的页面路由.然而,值得注意的是,某些特殊文件格式在生成过程中并不会被当作路由路径来处理. app |-auth login page. ...

  8. anaconda3部署以及使用详解

    Anaconda3-2019.10-Linux-x86_64.sh 某次执行Python程序,其中两个错误信息如下: ImportError: libcblas.so.3: cannot open s ...

  9. 本地项目文件上传到git

    初始化项目: git init 与服务器项目关联:git remote add origin "http://**************************/r/ruoyi.git&q ...

  10. 【源码阅读】消息队列之DoNetMQ的初步了解

    这个组件,是一个分布式的组件,好处就是,不怕消息太多了,都挤在一个服务器上,出现服务器内存不够的情况.服务器内存不够用的问题解决了,但是如果消费队列要进行数据库的操作,那么性能瓶颈将出现在数据库上,如 ...