我正在尝试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.sslCipherList
和GIT_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