SSL証明書で自分自身を識別するサーバーを持っています。証明書は自己署名されています。
ユーザーがサーバーを置き換えて、オペレーティングシステムによって信頼されている証明書のリストに「偽の」証明書を追加しようとした場合、ソフトウェアがデータを送信しないようにしたい.
これが私がこれまでに思いついたものです:
ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
{
bool result = false;
if (sender is HttpWebRequest)
{
var wr = sender as HttpWebRequest;
if (wr.Address.Host == "<my host>")
{
if (cert == null)
{
return false;
}
if (cert.GetCertHashString() == "<certificate hash string>")
{
return true;
}
return false;
}
}
return result;
}
私がコードを理解している方法では、私の証明書を信頼しますmy host
が、ユーザーによるホストの置き換えからは保護されません。
my host
が の証明書で自身を識別し、他の証明書を提示する<certificate hash string>
場合my host
は、接続を拒否する必要がある場合にのみ、ソフトウェアが受け入れるようにします。
それ、どうやったら出来るの?