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. OLAP系列之分析型数据库clickhouse单机版部署(一)

    一.概述 官网:https://clickhouse.com/docs/zh ClickHouse是Yandex于2016年开源的列式存储数据库(DBMS),主要用于在线分析处理查询(OLAP),能够 ...

  2. Linux 根文件系统的移植(从入门到精通)

    一.简介 提到操作系统的安装,还得从大学的时候说起,刚入学的时,朋友的系统本崩了,跑去电脑城换个系统花了40大洋,震惊了贫穷的我.好像发现了商机,果断开始了折腾自己的电脑,然后用朋友的电脑进行测试,由 ...

  3. VGA显示文字

    VGA显示文字 VGA字符显示的原理 把要显示的字符转换成字符点阵,然后编码存储,着色的部分为1,其它为0.然后在VGA上输出显示. 字符点阵生成软件: https://www.zhetao.com/ ...

  4. 四、Doris物化视图

    使用场景:  在实际的业务场景中,通常存在两种场景并存的分析需求:对固定维度的聚合分析 和 对原始明细数据任意维度的分析. 例如,在销售场景中,每条订单数据包含这几个维度信息(item_id, sol ...

  5. 启动docker某个image(镜像)的已经关闭的container(容器)

    1.创建一个后台运行 ubuntu 容器 root@haima-PC:/home/haima/Desktop# docker run -d --name ubuntu-lnmp ubuntu bf24 ...

  6. cpu的各种信息查询

    Linux查看物理CPU个数.核数.逻辑CPU个数 # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物 ...

  7. npm 安装 sass 引用

    1.npm install node-sass --save-dev 2.npm install sass-loader --save-dev npm i less-loader  --save-de ...

  8. 如何使用Charles查看页面接口请求?

    1.Charles下载地址: https://www.charlesproxy.com/latest-release/download.do 2.如何抓取浏览器的操作 2.1 点击映射 2.2 点击映 ...

  9. json 编码后导致数字变为科学计数,从而导致解码后签名与编码前签名不正确的解决办法。

    docoder := json.NewDecoder(strings.NewReader(string(originData))) docoder.UseNumber() _ = docoder.De ...

  10. Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务

    一.背景描述 在Windows环境下进行日常的项目开发过程中,有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行(没有用户登陆,服务在开机后也可以照常运行).且对于那些没 ...