[英]How to overcome the git error `Unknown SSL protocol error in connection`
我正在尝试 git clone 一些存储库,但随后出现错误:
$ 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; 另一方面,如果是服务器,我该如何解决?
在 SourceTree 和 scm git(控制台和 gui)上都收到错误。
如何配置它以使用 TLS?
Git 2.5(2015 年 8 月)已经允许在协商 SSL 连接时使用http.sslCipherList
和GIT_SSL_CIPHER_LIST
指定要使用的密码列表。
(请参阅无法与对等方安全通信:没有通用加密算法)
从 Git 2.6+(2015 年第三季度)开始,可以明确指定 SSL 版本:
http
: 添加对指定 SSL 版本的支持
请参阅Elia Pinto ( devzero2000
) 的commit 01861cb (2015 年 8 月 14 日) 。
帮助者: Eric Sunshine ( sunshineco
) 。
(由Junio C gitster
合并-- gitster
-- in 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 连接,包括 web、API 和到https://github.com和https://api.github.com 的git 连接。
- diffie-hellman-group1-sha1:这适用于到 github.com 的所有 SSH 连接
- diffie-hellman-group14-sha1:这适用于到 github.com 的所有 SSH 连接
Git 2.18(2018 年第二季度)现在可以使用 TLSv1.3:
当使用更新的cURL
构建时, GIT_SSL_VERSION
现在可以指定“ tlsv1.3
”作为其值。
请参阅Loganaden Velvindron ( loganaden
) 提交的 d81b651 (2018 年 3 月 29 日) 。
(由Junio C gitster
合并-- gitster
-- in commit 9b59d88 ,2018 年 4 月 11 日)
http
: 允许使用 TLS 1.3除了现有的 tlsv1.[012] 之外,向
http.sslVersion
添加一个 tlsv1.3 选项选项。
libcurl
从 7.52.0 开始支持这个。这需要启用 TLS 1.3 的 OpenSSL 1.1.1 或使用最新版本的 NSS 或 BoringSSL 作为 TLS 后端构建的
curl
。
在 Git 2.21(2019 年第一季度)中,一个新的“ http.version
”配置变量可以与最近的 cURL 库一起使用,以强制在获取和推送时使用的 HTTP 版本进行对话。
请参阅Force Charlie ( fcharlie
) 提交的 d73019f (2018 年 11 月 9 日) 。
(由Junio C gitster
合并-- gitster
--在commit 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
手册页现在显示:
http.version:
与服务器通信时使用指定的 HTTP 协议版本。
如果要强制默认。
可用和默认版本取决于libcurl
。
实际上这个选项的可能值是:
- HTTP/2
- HTTP/1.1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.