2

の証明書のピン留めを有効にしようとしてい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_clientgit clone。ダンプで確認できる唯一の違い (クライアント ハロー) は、トラフィックの SNIanongit.gentoo.orgと ALPN です。git クライアントとブラウザーを区別するには少なすぎるようです。http/1.1git

問題は、サーバーがgit別の証明書で応答するためにクライアントをどの程度正確に検出するかということです。

4

1 に答える 1

0

どうやら、ここで違いを生むのは 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 を使用しない場合と使用する場合)。2 つ目は で使用しgit cloneます。

とはいえ、そのようなことをする本当の理由は、私にとっていまだに謎です。

于 2016-08-27T10:20:36.600 に答える