3

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は、接続を拒否する必要がある場合にのみ、ソフトウェアが受け入れるようにします。

それ、どうやったら出来るの?

4

1 に答える 1