通过 git 将密码传递给 libcurl?

passing ciphers to libcurl through git?

提问人:Capt. Crunch 提问时间:10/29/2012 最后编辑:Capt. Crunch 更新时间:1/3/2018 访问量:2492

问:

环境:Fedora 15 x64(是的,我们正在远离它),git 1.7.11.1。

我们遇到了 git clone 的问题,该问题在 https 存储库上失败,因为 Git 服务器使用的密码在客户端上默认未启用。

我们设法用普通的“curl -v”(curl 7.21.3,但 git 似乎正在使用自己的副本)复制该问题:

curl -v https://git.repo.com

(内部服务器名称已替换)像 Git 一样失败,但是:

curl --cipher rsa_rc4_128_sha -v https://git.repo.com

成功。

现在的问题是,我们如何才能将这样的标志传递给 Git 使用的 libcurl。到目前为止,我还没有找到这样的方法(谷歌搜索了 libcurl、git,查看了 Git 和 libcurl 的源代码)。

git https libcurl

评论

0赞 Capt. Crunch 10/29/2012
进一步查看 libcurl 源代码,命令行标志集 ,这在 Git 源代码的任何地方都没有提到。到目前为止,它看起来只是不受支持。:(curl --cipherCURLOPT_SSL_CIPHER_LIST

答:

2赞 Daniel Stenberg 1/21/2014 #1

不,指定 libcurl 密码列表的选项称为 CURLOPT_SSL_CIPHER_LIST,但 git 不使用。

您需要修改 git 源代码才能引入此功能。应该不会太难,也许你可以说服 git 项目在未来接受这个变化!

2赞 Emily Mabrey 1/3/2018 #2

Git 支持选择 SSL 密码

从 Git 版本 2.5.0(请参阅发行说明)开始,您可以使用 git 配置变量来执行此操作。如果您能够升级 Git 版本,这是通过 Git 将密码列表传递给 libcURL 的最佳方式。http.sslCipherList

该变量在 Git 的文档中描述如下:http.sslCipherList

协商 SSL 连接时要使用的 SSL 密码列表。可用的密码取决于 libcurl 是针对 NSS 还是 OpenSSL 构建的,以及正在使用的加密库的特定配置。在内部,这设置了选项;有关此列表格式的更多详细信息,请参阅 libcurl 文档CURLOPT_SSL_CIPHER_LIST

Git 命令

要为 Git 全局设置密码列表,您需要运行:

git config --global http.sslCipherList "<List of Cipher Identifiers>"

了解 cURL 接受的密码标识符因 cURL 链接的 SSL 库而异,这一点非常重要!这使得此配置值在所有 cURL 安装之间不可移植,这些安装在其链接的 SSL 库中有所不同。

此外,虽然我在下面链接了特定于后端的文档,但只有关于密码标识符的 cURL 文档是可靠的,因为 cURL 开发人员没有完美地重现每个后端的各种标识符,如此邮件列表线程中所述。

资源

评论

1赞 VonC 1/3/2018
很好的总结。+1 来自 Git 2.5+(2015 年第 2 季度):stackoverflow.com/a/30442395/6309
0赞 Emily Mabrey 1/3/2018
我只是想在我发布后查一下,我回来发现你已经为我做了跑腿工作。希望我在自己查看介绍版本之前看到您的评论!我已经编辑了答案以包含对所需 git 版本的引用。
0赞 VonC 1/3/2018
没问题:我已经做这种跑腿工作(关于新的 Git 功能)很长一段时间了。