[英]gitlab Peer certificate cannot be authenticated with known CA certificates
[英]Cannot communicate securely with peer: no common encryption algorithm(s)
我是fedora 20用户。 在克隆存储库时,我收到以下错误:“克隆到'git_missions'...致命:无法访问' https://openhatch.org/git-mission-data/git/hithard/ ':无法安全地与peer:没有通用的加密算法。“
我不知道该怎么办?需要帮助。
最简单的解决方案是使用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 2.5+中合并(2015年第2季度)
请参阅2015年5月8日Lars Kellogg-Stedman( larsks
) 提交的f6f2a9e 。
(由Junio C gitster
合并- gitster
- in commit 39fa791 ,2015年5月22日)
http
:添加对指定SSL密码列表的支持教git一个新的选项,“
http.sslCipherList
”,它允许用户指定协商SSL连接时使用的密码列表。
该设置可以被GIT_SSL_CIPHER_LIST
环境变量覆盖。
git config
手册页现在包括:
http.sslCipherList:
协商SSL连接时使用的SSL密码列表。
可用的密码取决于libcurl是针对NSS还是OpenSSL构建的,以及正在使用的加密库的特定配置。
在内部设置'CURLOPT_SSL_CIPHER_LIST'选项; 有关此列表格式的更多详细信息,请参阅libcurl文档 。可以被'
GIT_SSL_CIPHER_LIST
'环境变量覆盖。
要强制git使用libcurl的默认密码列表并忽略任何显式的http.sslCipherList
选项,请将'GIT_SSL_CIPHER_LIST
'设置为空字符串。
这可以在2015年派上用场:
2015年8月更新:Git 2.6 +(2015年第3季度)将允许明确指定SSL版本:
http
:添加对指定SSL版本的支持
请参阅Elia Pinto的 承诺01861cb (2015年8月14日) ( devzero2000
) 。
帮助: 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'设置为空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.