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?
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
siehe @iignatovs Antwort für das, was Sie für Framework v4.0 tun müssen. Mein Code funktioniert mit 4.5+
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 .
Die VB.NET-Übersetzung von iignatovs Antwort :
ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)
ServicePointManager.DefaultConnectionLimit = 9999
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;
}
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 ).