2

https WebリクエストからXMLドキュメントを作成しようとしていますが、サイトに無効な証明書があると、XMLドキュメントを機能させるのに問題があります。私は自分のアプリケーションが証明書を気にしないようにしたいのです。私はそれが恐れることなくその人生を生き生きとさせたいのです!

これが私が持っていた最初のコードです。これは、標準のhttp(非SSL)リクエストから必要なものを取得するために以前に使用したことがあります。

XmlDocument xml = new XmlDocument();
XmlTextReader reader = new XmlTextReader("https://www.example.com");
xml.Load(reader);

サイトに無効なSSL証明書があると、次のエラーが発生します。

要求は中止されました:SSL/TLSのセキュリティで保護されたチャネルを作成できませんでした。

今、私はグーグルをやって、いくつかの有望な解決策を試しましたが、それは役に立たないようです。

ここでSOで試したものは良さそうに見えましたが、機能しなかったようです。上記のコードの直前に「承認された回答」のコード行を追加しました。

違いが生じる場合に備えて、私のコードはクラスライブラリにあり、コンソールアプリを介してテストしています。.Net4も使用しています。


これが私の最新の試みです(これは機能しません):

XmlDocument xml = new XmlDocument();

ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback((s, ce, ch, ssl) => true);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlCommand);
request.Credentials = CredentialCache.DefaultCredentials;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (Stream receiveStream = response.GetResponseStream())
    {
        XmlTextReader reader = new XmlTextReader(receiveStream);
        xml.Load(reader);
    }
}
4

3 に答える 3

2

OK、解決策を見つけました。テストのためにサーバーでSSLを無効にすることを選択し、SSL 3を使用していることに気付きました。別のGoogle検索の後で、問題を修正するための追加のコードを見つけました(設定することが重要SecurityProtocolTypeです)。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback((s, ce, ch, ssl) => true);

XmlDocument xml = new XmlDocument();
XmlTextReader reader = new XmlTextReader(urlCommand);
xml.Load(reader);
于 2012-07-13T12:06:59.010 に答える
0

うーん、多分XmlTextReaderはHTTPSにアクセスする別の方法を使用しています。

を使用してWebリクエストを作成し、XMLテキストリーダーにHttpWebRequest渡します(オーバーライドは元の場所に残します)response.GetResponseStream()ServicePointManager.ServerCertificateValidationCallback

于 2012-07-13T11:23:42.247 に答える
0

このエラーの理由:

Webサイトで有効なクライアント証明書を使用していません。

以下を試すことができます:

  • すばやく向きを変えるには、http:// _____ *を使用してURLにアクセスしてみてください。これはお勧めしませんが、テストには試してみてください。*

  • したがって、有効なクライアント証明書を使用していないため、次のように記述できます。

    • XMLのダウンロードを要求している場所、またはhttp要求を行っている場所にこの行を追加します。

    //モック証明書の検証を追加します

    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OnValidationCallback);

  • グローバルメソッドとして以下を追加します。

    public static bool OnValidationCallback(object sender、X509Certificate cert、X509Chain chain、SslPolicyErrors errors){return true; }

于 2021-06-18T13:39:44.447 に答える