【问题标题】:Cannot communicate securely with peer: no common encryption algorithm(s)无法与对等方安全通信:没有通用加密算法
【发布时间】:2015-07-17 09:54:15
【问题描述】:

我是 Fedora 20 用户。克隆存储库时,出现以下错误: " 克隆到 'git_missions'... 致命:无法访问“https://openhatch.org/git-mission-data/git/hithard/”:无法与对等方安全通信:没有通用加密算法。 "

我不知道该怎么办?需要帮助。

【问题讨论】:

  • 您将能够使用 Git 2.5+°(2015 年第二季度)将密码列表传递给 git 中的 curl。见my answer below

标签: git algorithm encryption fedora20


【解决方案1】:

最简单的解决方案就是使用http 而不是https

$ git clone http://openhatch.org/git-mission-data/git/hithard/
Cloning into 'hithard'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

我认为错误本身(“没有通用加密算法”)是准确的;似乎服务器想要使用 git 的底层 SSL 库不支持的某种椭圆曲线密码 (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)。您可以使用 wireshark 之类的东西来捕获 git 和服务器之间的 SSL 握手,并查看来回传递的选项。

至少在我的系统上,curl 似乎不支持这种密码,git 使用libcurl 来处理 https/http 连接。

更新

因此,根据我对@mattdm 的最后评论,我发现我系统上的curl 正在使用NSS 加密库,以下工作:

curl --ciphers ecdhe_ecdsa_aes_128_gcm_sha_256 https://openhatch.org/

不幸的是,没有任何方法可以将密码列表传递给git。使它这样做的补丁是微不足道的——here is one version I just made——但我不知道上游接受这个的可能性有多大。

【讨论】:

  • 哇!!谢谢。但我真的很想知道为什么这有效但不是“https”
  • @mattdm,至少在 Fedora 上,curl 使用的是 NSS 加密库而不是 OpenSSL。至少,只有 this document 的“NSSCipherSuite”中的值似乎有效。
  • 我有一个patch accepted to git 来解决这个问题。
  • 恭喜。该补丁现已合并。在意识到你是补丁的作者之前,我实际上已经写了下面的所有答案!
【解决方案2】:

不幸的是,没有任何方法可以将密码列表传递给 git

larsks提到in the comments

我已经接受了 git 的补丁来解决这个问题

这确实已被接受,并在 Git 2.5+(2015 年第二季度)中合并

参见commit f6f2a9eLars Kellogg-Stedman (larsks),2015 年 5 月 8 日。
(由 Junio C Hamano -- gitster -- 合并,commit 39fa791,2015 年 5 月 22 日)

http: 添加对指定 SSL 密码列表的支持

教 git 一个新选项“http.sslCipherList”,它允许一个人 指定协商 SSL 连接时要使用的密码列表。
该设置可以被GIT_SSL_CIPHER_LIST 环境覆盖 变量。

git config man page 现在包括:

http.sslCipherList:

协商 SSL 连接时使用的 SSL 密码列表。
可用密码取决于 libcurl 是针对 NSS 还是 OpenSSL 构建的,以及正在使用的加密库的特定配置。
这在内部设置了“CURLOPT_SSL_CIPHER_LIST”选项;见libcurl documentation for more details on the format of this list

可以被“GIT_SSL_CIPHER_LIST”环境变量覆盖。
要强制 git 使用 libcurl 的默认密码列表并忽略任何显式的 http.sslCipherList 选项,请将 'GIT_SSL_CIPHER_LIST' 设置为空字符串。


这可以在 2015 年派上用场:


2015 年 8 月更新: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' 设置为空字符串。

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 2015-09-15
    • 2023-03-09
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多