我是fedora 20用户。在克隆存储库时,我收到以下错误: “克隆到'git_missions'...... 致命:无法访问“https://openhatch.org/git-mission-data/git/hithard/”:无法与对等方安全通信:没有通用的加密算法。 “
我无法做什么?需要帮助。
答案 0 :(得分:7)
最简单的解决方案就是使用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 - 但我不知道在上游获得这个接受的可能性是多少。
答案 1 :(得分:1)
不幸的是,没有办法将密码列表传递给git
我已经接受了git解决此问题的补丁
确实已经接受了,并且在Git 2.5 +(2015年第2季度)中合并
2015年5月8日commit f6f2a9e旁边的Lars Kellogg-Stedman (larsks
)
(Junio C Hamano -- gitster
--在2015年5月22日commit 39fa791合并)
http
:添加对指定SSL密码列表的支持教git一个新的选项,&#34;
http.sslCipherList
&#34;,允许一个 指定协商SSL连接时要使用的密码列表GIT_SSL_CIPHER_LIST
环境可以覆盖该设置 变量
git config
man page现在包括:
http.sslCipherList:
协商SSL连接时使用的SSL密码列表 可用的密码取决于libcurl是针对NSS还是OpenSSL构建的,以及正在使用的加密库的特定配置。
在内部设置&#39; CURLOPT_SSL_CIPHER_LIST&#39;选项;请参阅libcurl documentation for more details on the format of this list。可以被&#39;
GIT_SSL_CIPHER_LIST
&#39;覆盖。环境变量。
要强制git使用libcurl的默认密码列表并忽略任何明确的http.sslCipherList
选项,请设置&#39;GIT_SSL_CIPHER_LIST
&#39;到空字符串。
这可以在2015年派上用场:
2015年8月更新:Git 2.6 +(2015年第3季度)将允许明确指定SSL版本:
http
:添加对指定SSL版本的支持
commit 01861cb见Elia Pinto (devzero2000
)(2015年8月14日)
帮助:Eric Sunshine (sunshineco
)。
(由Junio C Hamano -- gitster
--合并于commit ed070a4,2015年8月26日)
http.sslVersion
协商SSL连接时使用的SSL版本,如果要强制使用默认值 可用和默认版本取决于libcurl是针对NSS还是OpenSSL构建的,以及正在使用的加密库的特定配置。在内部设置了
CURLOPT_SSL_VERSION
&#39;选项;有关此选项的格式以及支持的ssl版本的更多详细信息,请参阅libcurl文档 实际上,此选项的可能值为:
- SSLV2
- SSLV3
- 使用TLSv1
- tlsv1.0
- tlsv1.1
- TLSv1.2工作
可以被&#39;
GIT_SSL_VERSION
&#39;覆盖。环境变量。
要强制git使用libcurl的默认ssl版本并忽略任何显式http.sslversion
选项,请设置&#39; GIT_SSL_VERSION&#39;到空字符串。