私のアプリケーションはExperianサーバーに接続し、ExperianはTLS 1.0およびTLS 1.1のサポートをすぐに停止します。 HTTPSを使用するすべての接続では、TLSバージョン1.2を使用する必要があります。
私はその問題についていくつかの調査を行い、.NET 4.0フレームワークでTLS 1.2を使用してHttpWebRequest
を送信することを確認したい
そうでない場合は、おそらく.NET 4.5でwebservice
を作成し、そのメソッドを呼び出す必要があります。そうであれば、何もする必要はありません。
すでにその問題に直面している人はいますか?
はい、サポートしていますが、ServicePointManager
でTLSバージョンを明示的に設定する必要があります。 Experianを呼び出す前に、いつでも(同じアプリドメインで)このコードを実行してください:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
フレームワークv4.0で何をする必要があるかについては、 @ iignatovの答え を参照してください。私のコードは4.5+で動作します
Paypalをレガシーアプリケーションに統合する際に同じ問題に対処する必要があり、.NET 4.0の次の回避策が見つかりました。
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;
基本的に回避策は、TLS 1.2のポートを直接割り当てることです。
すべてのクレジットは CodeProject のコメンターに送られます。
iignatovの答え のVB.NET翻訳:
ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)
ServicePointManager.DefaultConnectionLimit = 9999
FrameWork 4.0はTLS 1.1または1.2をサポートしていませんが、NugetマネージャーからRebex.Httpをダウンロードすることでこの問題を修正できます。
Rebex.Licensing.Key = "..."; //Lisans Number
var creator = new HttpRequestCreator();
creator.Register();
WebRequest request = WebRequest.Create("https://www.test.com");
request.Method = "POST";
request.Headers.Add("utsToken", txtToken.Text);
request.ContentType = "application/json";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string json = "{\"VRG\":\"test\"}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (WebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
txtSonuc.Text += result;
}
残念ながら、これはできません。 Tls12は、.netfx 4.5まで追加されませんでした( ドキュメント を参照)。また、これを正しく実行するには、Windows Server 2008 R2 +またはWindows 7+が必要です( Introducing TLS のApplies Toセクションに注意してください)。