Git 无法与对等方安全通信:没有通用加密算法
我是fedora 20的用户。克隆存储库时,我遇到以下错误: “克隆成‘git_任务’。。。 致命:无法访问“”:无法与对等方安全通信:没有通用加密算法Git 无法与对等方安全通信:没有通用加密算法,git,algorithm,encryption,fedora20,Git,Algorithm,Encryption,Fedora20,我是fedora 20的用户。克隆存储库时,我遇到以下错误: “克隆成‘git_任务’。。。 致命:无法访问“”:无法与对等方安全通信:没有通用加密算法 我不知道该怎么办?需要帮助。最简单的解决方案就是使用http而不是https: $ git clone http://openhatch.org/git-mission-data/git/hithard/ Cloning into 'hithard'... remote: Counting objects: 3, done. remote: T
我不知道该怎么办?需要帮助。最简单的解决方案就是使用
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
。让它这样做的补丁是微不足道的——但我不知道让它被接受的几率有多大
不幸的是,没有任何方法可以将密码列表传递给git
提到:
我已经有一个git接受的补丁来解决这个问题
这确实已经被接受,并合并到Git 2.5+(2015年第二季度)
见2015年5月8日。(于2015年5月22日被合并)
http
:添加对指定SSL密码列表的支持
向git教授一个新选项“http.sslCipherList
”,该选项允许
指定协商SSL连接时要使用的密码列表。该设置可由
GIT\u SSL\u CIPHER\u列表
环境覆盖
变数
目前的方案包括:
http.sslCipherList:
协商SSL连接时使用的SSL密码列表。可用的密码取决于libcurl是基于NSS还是OpenSSL构建的,以及使用的加密库的特定配置。
在内部设置“CURLOPT_SSL_CIPHER_LIST”选项;看 可以被“
GIT\u SSL\u CIPHER\u LIST
”环境变量覆盖。要强制git使用libcurl的默认密码列表并忽略任何显式的
http.sslCipherList
选项,请将“git\u SSL\u cipher\u list
”设置为空字符串
这在2015年可能会派上用场:
- “”
- “”
- 使用(,Logjam攻击利用Diffie-Hellman密钥交换部署方式的弱点)
2015年8月更新:Git 2.6+(2015年第3季度)将允许明确指定SSL版本:
http
:添加对指定SSL版本的支持
参见(2015年8月14日)作者。帮助人:。
(于2015年8月26日合并) 协商SSL连接时要使用的SSL版本,如果要强制使用默认版本。
可用版本和默认版本取决于libcurl是基于NSS还是OpenSSL构建的,以及使用的加密库的特定配置。在内部设置“
CURLOPT\u SSL\u VERSION
”选项;有关此选项格式和支持的ssl版本的更多详细信息,请参阅libcurl文档。实际上,此选项的可能值为:
- sslv2
- sslv3
- tlsv1
- tlsv1.0
- tlsv1.1
- tlsv1.2
GIT\u SSL\u VERSION
”环境变量覆盖。要强制git使用libcurl的默认ssl版本并忽略任何显式的
http.sslversion
选项,请将“git\u ssl\u version”设置为空字符串
哇!谢谢。但我真的很想知道为什么这样做有效,而不是“https”@mattdm,至少在Fedora上,
curl
使用的是NSS加密库,而不是OpenSSL。至少,只有来自的“NSSCipherSuite”的值似乎有效。我有一个解决这个问题的方法。祝贺。该修补程序现在已合并。在意识到你是这个补丁的作者之前,我已经把所有的答案都写在下面了!您将能够使用git 2.5+°(2015年第2季度)将密码列表传递给curl in git。看见
http.sslVersion