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

时间:2016-08-27 10:02:56

标签: git ssl curl https pinning

我尝试为git clone启用证书固定功能。为了做到这一点,我使用了openssl s_client并从服务器中获取了证书你好:

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_clientgit clone的证书不同。我在转储中只能看到差异(在客户端问候中):anongit.gentoo.org的SNI和http/1.1流量中的git的ALPN。区分git客户端和浏览器似乎太少了。

所以,问题是:服务器如何直接检测到git客户端以便使用其他证书进行回复?

1 个答案:

答案 0 :(得分:0)

显然,差异制造者是SNI:

Agent   Chandigarh_Leads    Chandigarh_TotalTime    Chandigarh_RPH  Chandigarh_RPH_TotalRev     NewDelhi_Leads  .......

ABC     102.00              10.52                   22.79           239.70                      10              .......
XYZ     14                  1.52                    21.64           32.90                       14              ............

这些命令返回不同的证书哈希值(没有和相应地使用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 一起使用。

然而,做这种事情的实际原因对我来说仍然是一个谜。