1. ホーム
  2. c#

リクエストは中止されました。SSL/TLS セキュアチャネルを作成できませんでした

2023-10-04 09:28:47

質問

私の顧客は、SSL と Internet Explorer の問題について私に知らせてきました。彼らは、URL にアクセスする際に信頼の問題が発生すると言っています。

私は HTTPS を介して JSON にアクセスしています。Web サイトは 1 つのサーバー上にあり、私は自分のローカル マシンでコンソール アプリを使用しています。SSL 証明書を回避しようとしていますが、私のコードはまだ失敗しています。

この問題を解決するために、HttpWebRequest を変更することはできますか。

このコードを使用して、このエラーが発生しました。

    // You must change the URL to point to your Web server.
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        req.AllowAutoRedirect = true;

        // allows for validation of SSL conversations
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };


        WebResponse respon = req.GetResponse();
        Stream res = respon.GetResponseStream();

        string ret = "";
        byte[] buffer = new byte[1048];
        int read = 0;
        while ((read = res.Read(buffer, 0, buffer.Length)) > 0)
        {
            //Console.Write(Encoding.ASCII.GetString(buffer, 0, read));
            ret += Encoding.ASCII.GetString(buffer, 0, read);
        }
        return ret;

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

このコードでロギングを有効にしました。

http://blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx

ログはbin/debugフォルダにありました(コンソールアプリのDebugモードにしていました)。セキュリティプロトコルの種類をSSL 3として追加する必要があります。

ログにアルゴリズムの不一致が表示されました。以下は私の新しいコードです。

        // You must change the URL to point to your Web server.
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;


        // Skip validation of SSL/TLS certificate
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };


        WebResponse respon = req.GetResponse();
        Stream res = respon.GetResponseStream();

        string ret = "";
        byte[] buffer = new byte[1048];
        int read = 0;
        while ((read = res.Read(buffer, 0, buffer.Length)) > 0)
        {
            Console.Write(Encoding.ASCII.GetString(buffer, 0, read));
            ret += Encoding.ASCII.GetString(buffer, 0, read);
        }
        return ret;