簡體   English   中英

如何克服 git 錯誤`連接中的未知 SSL 協議錯誤`

[英]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.sslCipherListGIT_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.comhttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM