如何克服 git 错误“连接中出现未知 SSL 协议错误”



我正在尝试git克隆一些存储库,但随后出现错误:

$ git clone --recursive https://some-url.git
Cloning into 'project'...
fatal: unable to access 'https://https://some-url.git/': Unknown SSL protocol error in connection to
some-url.git:443

我已经读到git存储库被移动以强制TLS1.0,并且由于POODLE漏洞而不再支持SSLv3通信。但我不知道此错误消息是否意味着我的 git 客户端只知道谈论 SSLv3 并且服务器拒绝,或者服务器只知道谈论 SSLv3 而我的客户端拒绝。如果问题出在我的客户端上,如何将其配置为使用 TLS;另一方面,如果是服务器,我该如何解决?

该错误在源代码树和 scm git(控制台和 gui)上都收到。

如何将其配置为使用 TLS?

Git 2.5(2015 年 8 月)已经允许指定在协商 SSL 连接时使用的密码列表,http.sslCipherListGIT_SSL_CIPHER_LIST .
(请参阅无法与对等方安全通信:没有通用加密算法)

从 Git 2.6+(2015 年第 3 季度)开始,可以显式指定 SSL 版本:

http:添加对指定SSL版本的支持

参见 提交 01861cb (2015 年 8 月 14 日) 由 Elia Pinto ( devzero2000 )。
帮助者: 埃里克阳光 ( sunshineco ).
(由Junio C Hamano -- gitster -- 在提交ed070a4中合并,2015年8月26日)

http.sslVersion

协商 SSL 连接时要使用的 SSL 版本(如果要强制使用默认值)。
可用版本和默认版本取决于libcurl是针对NSS还是OpenSSL构建的,以及正在使用的加密库的特定配置。在内部,这将设置" CURLOPT_SSL_VERSION "选项;有关此选项的格式和支持的 SSL 版本的更多详细信息,请参阅 libcurl 文档。
实际上,此选项的可能值为:

  • SSLV2
  • SSLV3
  • TLSV1
  • TLSV1.0
  • TLSv1.1
  • TLSV1.2

可以被 ' GIT_SSL_VERSION ' 环境变量覆盖。
要强制 git 使用 libcurl 的默认 ssl 版本并忽略任何显式http.sslversion选项,请将 'GIT_SSL_VERSION ' 设置为空字符串。


上述设置很重要,因为 GitHub 现在(2018 年 2 月)强制禁用弱加密标准。

2018 年 2 月 8 日,我们将开始禁用以下内容:

    TLSv1
  • /TLSv1.1:这适用于所有 HTTPS 连接,包括 web、API 和 git 连接到 https://github.com 和 https://api.github.com。
  • diffie-hellman-group1-sha1:这适用于与 github.com 的所有SSH连接
  • diffie-hellman-group14-sha1:这适用于所有与 github.com 的SSH连接

Git 2.18(2018 年第 2 季度)现在可以使用 TLSv1.3:
当使用更新的cURL构建时,GIT_SSL_VERSION现在可以指定"tlsv1.3"作为其值。

参见提交 d81b651 (29 Mar 2018) 由 Loganaden Velvindron ( loganaden )。
(由Junio C Hamano -- gitster -- 在提交 9b59d88 中合并,2018 年 4 月 11 日)

http:允许使用 TLS 1.3

除了现有的选项外,还向http.sslVersion添加 tlsv1.3 选项 TLSV1.[012] 选项。
libcurl 自 7.52.0 以来一直支持此功能。

这需要启用 TLS 1.3 的 OpenSSL 1.1.1 或curl构建 最新版本的NSS或BoringSSL作为TLS后端。


在 Git 2.21(2019 年第 1 季度)中,一个新的"http.version"配置变量可以与足够新的 cURL 库一起使用,以强制在获取和推送时用于通信的 HTTP 版本

请参阅提交 d73019f (09 Nov 2018) 由 Force Charlie ( fcharlie )。
(由Junio C Hamano -- gitster -- in commit 13d9919, 04 Jan 2019合并)

http:增加对选择 http 版本的支持

通常我们不需要设置libcurl来选择哪个版本的 用于与服务器通信的 HTTP 协议。
但是不同版本的libcurl,默认值也不相同。

CURL >= 7.62.0: CURL_HTTP_VERSION_2TLS
CURL < 7.62: CURL_HTTP_VERSION_1_1

为了让用户可以自由控制HTTP版本,我们需要添加一个设置来选择要使用的HTTP版本。

git config手册页现在显示:

http.version:

与服务器通信时使用指定的 HTTP 协议版本。
如果要强制使用默认值。
可用版本和默认版本取决于libcurl
实际上,此选项的可能值为:

  • HTTP/2
  • HTTP/1.1

相关内容

  • 没有找到相关文章

最新更新