wake-up-neo.com

Ist es möglich, HttpWebRequest mit TLS1.2 im .NET 4.0-Framework zu senden?

Meine Anwendung stellt eine Verbindung zum Experian-Server her und Experian wird TLS 1.0 und TLS 1.1 bald nicht mehr unterstützen. Für alle Verbindungen mit HTTPS muss TLS Version 1.2 verwendet werden.

Ich möchte einige Nachforschungen zu diesem Problem anstellen und sehen, wie das Senden von HttpWebRequest mit TLS 1.2 unter .NET 4.0 funktioniert

Wenn dies nicht der Fall ist, muss ich wahrscheinlich unter .NET 4.5 ein webservice erstellen und dessen Methoden aufrufen. Wenn dies der Fall ist, muss ich nichts tun.

Hat sich schon jemand mit diesem Thema auseinandergesetzt?

33
gene

Ja, es unterstützt es, aber Sie müssen die TLS-Version explizit auf ServicePointManager setzen. Lassen Sie diesen Code einfach jederzeit (in derselben App-Domain) ausführen, bevor Sie Experian anrufen:

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

Aktualisieren

siehe @iignatovs Antwort für das, was Sie für Framework v4.0 tun müssen. Mein Code funktioniert mit 4.5+

75
Crowcoder

Ich musste mich mit demselben Problem befassen, während ich Paypal in eine Legacy-Anwendung integrierte, und fand die folgende Problemumgehung für .NET 4.0, die den Trick zu tun scheint:

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

Grundsätzlich besteht die Problemumgehung darin, den Port für TLS 1.2 direkt zuzuweisen.

Das gesamte Guthaben geht an den Kommentator unter CodeProject .

30
iignatov

Die VB.NET-Übersetzung von iignatovs Antwort :

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

FrameWork 4.0 unterstützt TLS 1.1 oder 1.2 nicht. Sie können dieses Problem jedoch beheben, indem Sie Rebex.Http vom Nuget Manager herunterladen.

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

Leider nein, das kannst du nicht. Tls12 wurde erst mit .netfx 4.5 hinzugefügt (siehe die Dokumentation ). Beachten Sie, dass hierfür auch Windows Server 2008 R2 + oder Windows 7+ erforderlich ist (beachten Sie den Abschnitt Gilt für unter Einführung in TLS ).

0
Tim Copenhaver