【解決方法】例外が発生する理由 "リクエストは中止されました。 SSL/TLS セキュア チャネルを作成できませんでした。" C# を使用した ASP.NET では?

プログラミングQA


コアにリクエストを呼び出しています。 json リクエストを送信しています。 c# で asp.net を使用しています。 ブラウザでプロキシが無効になっています。 ポストマンでは、私は応答を得ています。
リクエスト ストリームの取得中に例外が発生しました:
リクエストは中止されました。 SSL/TLS セキュア チャネルを作成できませんでした。

私が試したこと:

私のコードは以下の通りです:

string RequestURL = txtRequestURL.Text;
              string jsonRequest = txtRequest.Text;

              txtLog.Text += "Transact_Posting_Core()-Creating/Assigning HTTP Web Request Process Started with Request URL:" + RequestURL + ",Request:" + jsonRequest + Environment.NewLine;

                  //System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                    | SecurityProtocolType.Tls11
                    | SecurityProtocolType.Tls12
                    | SecurityProtocolType.Ssl3;


              HttpWebRequest request = (HttpWebRequest)WebRequest.Create(RequestURL);
              System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
              //request.Host = "";
              request.Method = "POST";
              request.Accept = @"application/json";
              request.ContentType = @"application/json";
              Byte[] byteArray = encoding.GetBytes(jsonRequest);
              request.ContentLength = byteArray.Length;
              //request.Proxy = null;
             //string isProxyReqd = ConfigurationManager.AppSettings["isProxyReqd"] != null ? ConfigurationManager.AppSettings["isProxyReqd"].ToString() : string.Empty;
             // if (isProxyReqd == "1")
             // {
             //     request.Proxy = new WebProxy();
             // }

              request.ProtocolVersion = HttpVersion.Version10;

              string IsRequestHeaderFlag = ConfigurationManager.AppSettings["IsRequestHeaderFlag"] != null ? ConfigurationManager.AppSettings["IsRequestHeaderFlag"].ToString() : string.Empty;
              if (IsRequestHeaderFlag == "1")
              {
                  request.Headers.Add("X-API-KEY", txtXAPIKey.Text);
              }
              txtLog.Text += "Transact_Posting_Core()-Started Transact Posting Request Stream Process" + Environment.NewLine;
              using (Stream stm = request.GetRequestStream())

              {
                  stm.Write(byteArray, 0, byteArray.Length);
              }
              txtLog.Text += "Transact_Posting_Core()-Completed Transact Posting Request Stream Process" + Environment.NewLine;

              txtLog.Text += "Transact_Posting_Core()-Started Transact Posting Response Process" + Environment.NewLine;
              HttpWebResponse response = (HttpWebResponse)request.GetResponse();

              StreamReader sr = new StreamReader(response.GetResponseStream());
              string result = sr.ReadToEnd();
              txtResponse.Text = result;
              txtLog.Text += "Transact_Posting_Core()-Completed Transact Posting Response Process" + Environment.NewLine;

解決策 1

アクセスしようとしているエンドポイントは、使用しようとしているプロトコル (SSL3、TLS 1.0、TLS 1.1、または TLS 1.2) のいずれもサポートしていません。 推測では、TLS 1.3 のみをサポートしている可能性があります。他のものにはセキュリティの脆弱性があり、多くの場合無効になっているためです。

使用するプロトコルを明示的に定義するのではなく、OS で有効になっている任意のプロトコルを使用することをお勧めします。 TLS 1.3 のサポートが必要な場合は、.NET Framework 4.8 をターゲットにする必要があります。

.NET Framework を使用したトランスポート層セキュリティ (TLS) のベスト プラクティス – .NET Framework | マイクロソフト ラーン[^]

コメント

タイトルとURLをコピーしました