0

一部の SSL 証明書情報を取得しようとすると問題が発生します。

通常、コードは問題なく動作しますが、場合によっては 403 Forbidden エラーが発生します。このような場合でも証明書情報を取得したい。また、無効なログオン資格情報を取得している場合もいくつかあります。

X509Certificateこれらの問題のいずれかに関係なく、オブジェクトを取得したいと考えています。

IE を使用してそれらを参照すると、メッセージに関係なく証明書情報が表示されます。

したがって、サンプル コードでは、requestとの両方responseがオブジェクト変数として定義されており、 をrequest呼び出す前に適切に設定されていますgetRequest()

このコードは、Web エラーがない場合は正常に機能しますが、エラーがある場合、変数responsenull.

これらのエラーが表示されてもX509Certificate、 というオブジェクト変数にを取得する別の方法はありますか?cert

正直なところ、応答が機能するかどうかは気にしません。気にするのはX509Certificate.

// callback used to validate the certificate in an SSL conversation
private static bool ValidateRemoteCertificate(
    object sender,
    X509Certificate certificate,
    X509Chain chain,
    SslPolicyErrors policyErrors
) {
    // allow any old dodgy certificate...
    log.write(0, "entering ValidateRemoeCertificate ");
    return true;
}

// getRequest 
private int getRequest()
{
    try {
        log.write(1, "Validating " + webHostName);
        // request.Method = method;
        ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
        response = (HttpWebResponse)request.GetResponse();
        response.Close();
    } catch (Exception w) {
        if (w.Message.Contains("401"))
        {
            log.write(4, "Web Site Authentication Required for " + host + ":" + port);
            return 401;
        }
        else if (w.Message.Contains("403"))
        {
            log.write(4, "Forbidden Access for " + host + ":" + port);
            return 403;
        }
        else
        {
            log.write(4, "Error Reading Web Site " + host + " Port " + port + " " + w.Message);
            return 400;
        }
    }
    return 0;
}

ご協力ありがとうございます。

4

1 に答える 1

1

代わりにSslStreamクラスを使用してください。サーバーの証明書を調べるために、AuthenticateAsClient中に呼び出されるRemoteCertificateValidationCallbackデリゲートを受け取るコンストラクターを使用します。

于 2012-09-30T07:15:28.773 に答える