ホストするサーバー上の Web サービスに接続する .Net アプリケーションがあり、これらのサーバーの https/443 にバインドされた SSL 証明書があります。これらの SSL 証明書は自己署名されている場合があるため、X509Certificate2.Verify() メソッドと、ServicePointManager.ServerCertificateValidationCallback 用にプログラムしたメソッド内の SslPolicyErrors.None 列挙に完全に依存しているわけではありません。有効。
ハッシュ文字列 (X509Certificate.GetCertHashString()) の署名をチェックし、それを「承認済み」証明書のリストと比較する 2 番目のステップがあります。このようにして、既知の証明書である場合、コールバックに対して true を返すことができます。
インストール サイトの 1 つで、まったく同じ Web サーバーに接続すると、異なるハッシュ文字列が取得されます。X509Certificate オブジェクトのすべてのプロパティをログ ファイルに出力した後、接続時の「発行者」の値が異なることがわかりました。ユーザーのワークステーションからネットワーク ハードウェアに至るまでの過程で、何かが証明書を変更しています。アプリケーションが証明書を検証すると、まず第一に信頼できる機関ではなくなり、次にハッシュ文字列をチェックすると、承認されたリストにありません (発行者を変更するとハッシュが変更されるようです)。
誰もがこれをどのように行っているかについて何かアイデアを提供できますか? さらに、.Net でプログラムでそれを行う方法はありますか?
ありがとう、ダン