https服务器上的git客户端和浏览器分离

标签 git ssl curl https pinning

我正在尝试为 git clone 启用证书固定.为此,我使用了 openssl s_client并从服务器 hello 获取证书:

openssl s_client -connect anongit.gentoo.org:443 2>&1 </dev/null

但是下面的命令实际上在服务器证书检查上失败了:

git clone -c http.sslVerify=yes -c 'http.pinnedpubkey=sha256//13fY3xnMhZp6C5wKICfMZVJbN+AtmBbTXSy+sjJvKDE=' https://anongit.gentoo.org/git/repo/gentoo.git

做一点调查我在网络转储中发现 openssl s_client 的证书不同和 git clone .我在转储中看到的唯一区别(在客户端问候中)是:anongit.gentoo.org 的 SNI和 ALPN 为 http/1.1git交通。 git客户端和浏览器的区分好像太少了。

所以,问题是:服务器检测到 git 的准确程度如何?客户端为了回复不同的证书?

最佳答案

显然,这里的差异制造者是 SNI:

openssl s_client -connect anongit.gentoo.org:443 2>&1 </dev/null | sed -n '/BEGIN/,/END/p'  | openssl x509 -noout -pubkey | openssl rsa -pubin -outform DER | openssl dgst -sha256 -binary | openssl enc -base64

openssl s_client -servername anongit.gentoo.org -connect anongit.gentoo.org:443 2>&1 </dev/null | sed -n '/BEGIN/,/END/p'  | openssl x509 -noout -pubkey | openssl rsa -pubin -outform DER | openssl dgst -sha256 -binary | openssl enc -base64

这些命令返回不同的证书哈希值(相应地不使用和使用 SNI)。第二个是与 git clone 一起使用。

然而,做这样的事情的真正原因对我来说仍然是个谜。

关于https服务器上的git客户端和浏览器分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39179832/

相关文章:

php - 无法使PHP cURL SSL正常工作

php - 我需要帮助使用 PHP 将来自 Postman 的成功请求转换为 CURL 命令(涉及 HTTPS 和 POST)

git - 从差异中恢复一项更改

git - 使用 JGit 的 SSH 身份验证安全地访问 Git 存储库/身份验证失败

git - bundle 程序错误 : Retrying git cat-file . ..如果此错误仍然存​​在,您可以尝试删除缓存目录

android - 'res' 中的证书 - 它安全吗?

php - 将 PHP cURL 与 HTTP 调试代理一起使用

svn - 如何升级git-svn使用的SVN版本

azure - 对于 WebApp,Azure Key Vault 的用途是什么

通过 SNI 代理的 Python SSL