解决Git错误:gnutls_handshake() failed: The TLS connection was non-properly terminated

作者:谁偷走了我的奶酪2024.03.07 13:32浏览量:16

简介:当使用Git进行HTTPS操作时,可能会遇到gnutls_handshake() failed: The TLS connection was non-properly terminated的错误。这通常是由于SSL/TLS证书问题或网络问题导致的。本文将帮助你解决此问题,使Git操作恢复正常。

问题描述

当你尝试使用Git进行克隆(clone)、推送(push)或拉取(pull)操作时,可能会遇到如下错误:

  1. fatal: unable to access 'https://.../...': gnutls_handshake() failed: The TLS connection was non-properly terminated

这个错误通常意味着Git无法与远程仓库建立安全的TLS连接。这可能是由于多种原因造成的,包括网络问题、SSL/TLS证书问题或Git配置问题。

解决方案

1. 检查网络连接

首先,确保你的网络连接是稳定的。尝试访问其他HTTPS网站或服务,以排除网络问题。

2. 更新Git和GnuTLS

确保你的Git和GnuTLS版本是最新的。老版本的软件可能包含已知的安全漏洞或不支持最新的TLS协议。

你可以使用以下命令来更新Git(在大多数Linux发行版上):

  1. sudo apt-get update
  2. sudo apt-get install git

对于GnuTLS的更新,你需要根据你的操作系统和包管理器来执行相应的命令。

3. 配置Git使用HTTP而不是HTTPS

如果你无法更新Git或GnuTLS,或者更新后问题仍然存在,你可以尝试配置Git使用HTTP而不是HTTPS来访问远程仓库。这将绕过SSL/TLS证书验证,但请注意,这样做会降低安全性。

你可以使用以下命令来配置Git使用HTTP:

  1. git config --global http.postBuffer 524288000
  2. git config --global http.sslVerify false

这将禁用SSL证书验证,并将HTTP POST缓冲区的大小设置为较大的值,以避免因文件大小限制而导致的错误。

4. 配置Git使用特定的SSL/TLS版本

如果更新Git和GnuTLS没有解决问题,你还可以尝试配置Git使用特定的SSL/TLS版本。这可以通过设置GIT_SSL_VERSION环境变量来实现。

例如,要配置Git使用TLSv1.2,你可以在运行Git命令之前设置环境变量:

  1. export GIT_SSL_VERSION=tlsv1.2
  2. git clone https://.../...

你可以根据需要尝试不同的SSL/TLS版本。

5. 检查远程仓库的SSL/TLS证书

如果以上方法都没有解决问题,可能是远程仓库的SSL/TLS证书存在问题。你可以使用openssl命令来检查证书的有效性。

  1. openssl s_client -connect host:port

hostport替换为远程仓库的主机名和端口号。如果证书有效,你将看到证书的相关信息。如果证书无效或不受信任,你可能需要联系远程仓库的管理员来解决这个问题。

总结

gnutls_handshake() failed: The TLS connection was non-properly terminated错误通常是由于SSL/TLS证书问题或网络问题导致的。通过更新Git和GnuTLS、配置Git使用HTTP而不是HTTPS、配置Git使用特定的SSL/TLS版本或检查远程仓库的SSL/TLS证书,你应该能够解决这个问题。

请注意,禁用SSL证书验证会降低安全性,因此只有在你完全信任远程仓库并且没有其他解决方案的情况下才应该考虑使用这种方法。在大多数情况下,更新Git和GnuTLS或配置Git使用特定的SSL/TLS版本是更好的选择。

希望这个解决方案能帮助你解决Git错误:gnutls_handshake() failed: The TLS connection was non-properly terminated。