1

ホストするサーバー上の Web サービスに接続する .Net アプリケーションがあり、これらのサーバーの https/443 にバインドされた SSL 証明書があります。これらの SSL 証明書は自己署名されている場合があるため、X509Certificate2.Verify() メソッドと、ServicePointManager.ServerCertificateValidationCallback 用にプログラムしたメソッド内の SslPolicyErrors.None 列挙に完全に依存しているわけではありません。有効。

ハッシュ文字列 (X509Certificate.GetCertHashString()) の署名をチェックし、それを「承認済み」証明書のリストと比較する 2 番目のステップがあります。このようにして、既知の証明書である場合、コールバックに対して true を返すことができます。

インストール サイトの 1 つで、まったく同じ Web サーバーに接続すると、異なるハッシュ文字列が取得されます。X509Certificate オブジェクトのすべてのプロパティをログ ファイルに出力した後、接続時の「発行者」の値が異なることがわかりました。ユーザーのワークステーションからネットワーク ハードウェアに至るまでの過程で、何かが証明書を変更しています。アプリケーションが証明書を検証すると、まず第一に信頼できる機関ではなくなり、次にハッシュ文字列をチェックすると、承認されたリストにありません (発行者を変更するとハッシュが変更されるようです)。

誰もがこれをどのように行っているかについて何かアイデアを提供できますか? さらに、.Net でプログラムでそれを行う方法はありますか?

ありがとう、ダン

4

2 に答える 2

2

問題の接続が、SSLセッションを仲介しているbluecoatwebsenseなどのエンタープライズプロキシによって傍受されている可能性はありますか?

于 2012-07-02T21:21:08.180 に答える
0

証明書を変更すると、その署名が壊れます。検証により、何かが証明書を変更することが示されるため、証明書が「どのように」変更されたかではなく、何が変更されたかを確認する必要があります。

変更は簡単です。証明書は自己署名であるため、誰かが自分の鍵ペアを使用して別の自己署名証明書を作成し、別のサブジェクトまたは発行者を証明書に入れるだけです。大したことではありません。目標は明らかに、中間者プロキシをインストールしてトラフィックをキャプチャしてデコードすることです。

于 2012-07-02T16:39:44.177 に答える