web-dev-qa-db-ja.com

.NET 4.0フレームワークでTLS1.2を使用してHttpWebRequestを送信することは可能ですか

私のアプリケーションはExperianサーバーに接続し、ExperianはTLS 1.0およびTLS 1.1のサポートをすぐに停止します。 HTTPSを使用するすべての接続では、TLSバージョン1.2を使用する必要があります。

私はその問題についていくつかの調査を行い、.NET 4.0フレームワークでTLS 1.2を使用してHttpWebRequestを送信することを確認したい

そうでない場合は、おそらく.NET 4.5でwebserviceを作成し、そのメソッドを呼び出す必要があります。そうであれば、何もする必要はありません。

すでにその問題に直面している人はいますか?

33
gene

はい、サポートしていますが、ServicePointManagerでTLSバージョンを明示的に設定する必要があります。 Experianを呼び出す前に、いつでも(同じアプリドメインで)このコードを実行してください:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12

更新

フレームワークv4.0で何をする必要があるかについては、 @ iignatovの答え を参照してください。私のコードは4.5+で動作します

75
Crowcoder

Paypalをレガシーアプリケーションに統合する際に同じ問題に対処する必要があり、.NET 4.0の次の回避策が見つかりました。

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;

基本的に回避策は、TLS 1.2のポートを直接割り当てることです。

すべてのクレジットは CodeProject のコメンターに送られます。

30
iignatov

iignatovの答え のVB.NET翻訳:

ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)
ServicePointManager.DefaultConnectionLimit = 9999
2
Matt G

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;
}
0
önder çalbay

残念ながら、これはできません。 Tls12は、.netfx 4.5まで追加されませんでした( ドキュメント を参照)。また、これを正しく実行するには、Windows Server 2008 R2 +またはWindows 7+が必要です( Introducing TLS のApplies Toセクションに注意してください)。

0
Tim Copenhaver