1. ホーム
  2. c#

[解決済み] ssl時の証明書チェックを無視する方法

2022-06-01 13:21:36

質問

Httpsリソースをリクエストする際に、証明書のチェックを無視する方法を探しています。

しかし、私はまだいくつかの問題があります。私のコードを確認してください。私はちょうどコードが何をすべきか理解していない ServicePointManager.ServerCertificateValidationCallback の意味がわかりません。

このデリゲートメソッドはいつ呼ばれるのでしょうか?そしてもう一つ、このコードはどの場所に書けばいいのでしょうか?以前は ServicePointManager.ServerCertificateValidationCallback が実行される前か Stream stream = request.GetRequestStream() ?

public HttpWebRequest GetRequest()
{
    CookieContainer cookieContainer = new CookieContainer();

    // Create a request to the server
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_remoteUrl);

    #region Set request parameters

    request.Method = _context.Request.HttpMethod;
    request.UserAgent = _context.Request.UserAgent;
    request.KeepAlive = true;
    request.CookieContainer = cookieContainer;
    request.PreAuthenticate = true;
    request.AllowAutoRedirect = false;

    #endregion

    // For POST, write the post data extracted from the incoming request
    if (request.Method == "POST")
    {
        Stream clientStream = _context.Request.InputStream;
        request.ContentType = _context.Request.ContentType;
        request.ContentLength = clientStream.Length;

        ServicePointManager.ServerCertificateValidationCallback = delegate(
            Object obj, X509Certificate certificate, X509Chain chain, 
            SslPolicyErrors errors)
            {
                return (true);
            };

            Stream stream = request.GetRequestStream();

            ....
        }

        ....

        return request;
    }
}   

どのように解決するのですか?

グローバルな ServicePointManager を設定すると ServicePointManager.ServerCertificateValidationCallback。 を設定すると、以降のすべてのリクエストでこのポリシーが継承されます。これは、グローバルな設定であるため、この設定を アプリケーション開始 メソッドで設定するのが望ましいでしょう。 グローバル.asax .

コールバックを設定すると、デフォルトの動作がオーバーライドされ、自分でカスタム検証ルーチンを作成することができます。