• git clone发生gnutls_handshake() failed: Decryption has failed的解决方法


    系统是ubuntu (kylin) 20.04,git版本2.25。

    clone出错

    git clone github上的仓库的时候,报如下错误,
    fatal: 无法访问'https://github.com/xxx/yyy.git': gnutls_handshake() failed: Decryption has failed.
    重复多次都是如此。

    简单尝试

    git clone失败大部分情况都是网络问题,尤其是用github的情况下。

    首先尝试代理,http_proxy,https_proxy,git config http.proxy等等常用的都试了,甚至proxychains这种hack的方式也试了,结果都不行。瞬间自信没了。

    这次情况不一样了。

    google一下

    遇事不决问google,google一下只有寥寥几个结果,够惨的。排名第一是csdn[2],askubuntu和stackoverflow有几个相关但不完全相同的结果。

    最后得出的方法是重新编译git,默认的版本使用gnutls,在proxy环境下工作的不是很好。可以使用openssl替换,即使在较差的网络环境中也工作的很好。

    没办法,就搞吧。

    重新编译

    重新编译又有两种方法,其一是使用大佬提供的脚本[1]。第二是使用apt里的源码,自己编译打包deb,我参考了[2][3]两个教程。大致方法是

    1. 开启source源,获取源码apt source git
    2. 安装编译环境,sudo apt-get build-dep git
    3. 修改debian/control 文件中的libcurl4-gnutls-dev为libcurl4-openssl-dev,增加版本号dch -i
    4. 编译!dpkg-buildpackage -rfakeroot -uc -b,经过漫长的编译,以及跑了一整套test,终于打包了几个deb出来。(还有几个错误,不管了)
    5. 安装打包出来的deb,dpkg -i git_xxx.deb

    终于大功告成,git clone很慢但没报Decryption的错误,设置好proxy成功。最后一个步骤,apt-mark hold git,防止git自动更新掉。这样就可以了。

    后记

    具体错误原因没有深入研究,看上去会比较复杂。因此采取了一个workaround,记录于此,感谢所有原作者。

    第一次更新

    1.已验证在livecd(ubuntu kylin 20.04 pro)中的git仍然有这个bug。在银河麒麟v10 sp1 livecd中,安装的git也有这个bug。
    2.台式机(intel处理器)虚拟机同样livecd的git却是正常的,因此怀疑是硬件问题。
    3.gitee没有这个问题。
    推测是硬件问题,甚至可能是CPU指令集的问题。tls底层使用了AES算法,在cpu中有相关指令集。gitee没有问题可能是它使用了tls 1.2,而github是tls 1.3。
    暂时不做更多的尝试了。

    第二次更新

    规范了编译流程(增加版本号等)。

    参考

    1. https://github.com/paul-nelson-baker/git-openssl-shellscript/blob/main/compile-git-with-openssl.sh
    2. 解决git gnutls_handshake失败,https://blog.csdn.net/dean_yanqing/article/details/30239405
    3. 报错:gnutls_handshake() failed: Decryption has failed,https://www.cxyzjd.com/article/weixin_38184741/105889453
  • 相关阅读:
    mysql-基础和基本指令
    网络笔试面试
    Windows访问Linux下的共享目录的配置方法
    帧动画 连续播放多张图片动画 以及ui动画 SoundPool
    ScrollView listView gridView 之间的冲突问题
    handler------post传送方式
    handler通信机制
    内部存储 openFileInputStream openFileOutputStream
    popupMenu-----弹出菜单
    为系统菜单添加图标--------暴力反射
  • 原文地址:https://www.cnblogs.com/cocode/p/15619044.html
Copyright © 2020-2023  润新知