如何解决git错误 `Unknown SSL protocol error in connection`

3

我正在尝试克隆一些存储库,但是遇到了以下错误:

$ 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,并且不再支持SSLv3通信,因为POODLE漏洞。但我不知道这个错误信息是否意味着我的git客户端只能使用SSLv3与服务器通信而被拒绝,还是服务器只能使用SSLv3与客户端通信而被拒绝。如果问题在于我的客户端,我该如何配置它以使用TLS;另一方面,如果问题在于服务器,我该如何解决?该错误在SourceTree和scm git(控制台和GUI)上都会收到。

三年后,大多数Git仓库托管服务不再接受TLSv1.0。请参见我下面更新的答案。 - VonC
1个回答

0
如何配置它以使用TLS?
Git 2.5(2015年8月)已经允许在协商SSL连接时指定要使用的密码列表,使用http.sslCipherListGIT_SSL_CIPHER_LIST。(请参见Cannot communicate securely with peer: no common encryption algorithm(s)
从Git 2.6+(2015年第三季度)开始,将可以明确指定SSL版本:

http:添加支持指定SSL版本

请查看 commit 01861cb(2015年8月14日)由Elia Pinto (devzero2000)提交。
协助者:Eric Sunshine (sunshineco)
(由Junio C Hamano -- gitster --合并于commit 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连接,包括到https://github.comhttps://api.github.com的Web,API和Git连接。
  • diffie-hellman-group1-sha1:这适用于所有SSH连接到github.com
  • diffie-hellman-group14-sha1:这适用于所有SSH连接到github.com

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

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

http:允许使用TLS 1.3

除了现有的 tlsv1.[012] 选项之外,将一个 tlsv1.3 选项添加到 http.sslVersion 中。
libcurl从7.52.0开始支持此功能。

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


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

请参见提交 d73019f(2018年11月9日),作者为Force Charlie(fcharlie
(由Junio C Hamano -- gitster --提交 13d9919中合并,2019年1月4日)

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 man page 现在显示如下内容:
http.version:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接