web-dev-qa-db-fra.com

Est-il possible d'envoyer HttpWebRequest à l'aide de TLS1.2 sur .NET 4.0 Framework

Mon application se connecte au serveur Experian et Experian cessera bientôt de prendre en charge TLS 1.0 et TLS 1.1. Toute connectivité utilisant HTTPS doit utiliser TLS version 1.2.

Je veux faire quelques recherches sur ce problème et voir l'envoi de HttpWebRequest à l'aide de TLS 1.2 sur .NET 4.0 Framework fonctionne

Si ce n'est pas le cas, je devrai probablement créer un webservice sur .NET 4.5 et appeler ses méthodes. Si c'est le cas, je n'ai rien à faire.

Quelqu'un a-t-il déjà affronté ce problème?

33
gene

Oui, il le prend en charge mais vous devez définir explicitement la version TLS sur le ServicePointManager. Il suffit d'exécuter ce code à tout moment (dans le même domaine d'application) avant d'appeler Experian:

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

Mise à jour

voir réponse de @ iignatov pour ce que vous devez faire pour Framework v4.0. Mon code fonctionne avec 4.5+

75
Crowcoder

J'ai dû faire face au même problème, tout en intégrant Paypal dans une application existante, et j'ai trouvé la solution de contournement suivante pour .NET 4.0 qui semble faire l'affaire:

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

En gros, la solution consiste à attribuer directement le port à TLS 1.2.

Tout le mérite revient au commentateur à CodeProject .

30
iignatov

La traduction VB.NET de réponse de iignatov :

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

FrameWork 4.0 ne prend pas en charge TLS 1.1 ou 1.2. Toutefois, vous pouvez résoudre ce problème en téléchargeant Rebex.Http à partir du gestionnaire Nuget.

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

Malheureusement non, vous ne pouvez pas faire cela. Tls12 n'a pas été ajouté avant .netfx 4.5 (voir la documentation ). Notez que cela nécessite également que Windows Server 2008 R2 + ou Windows 7+ fonctionne correctement (remarquez la section S'applique à sur Présentation de TLS ).

0
Tim Copenhaver