J'ai besoin d'envoyer des données JSON à un point de terminaison TLS 1.2. Je voudrais avoir le SecurityProtocol spécifié dans App.config au lieu d'être codé en dur dans la source et ne pas vouloir définir le registre de la machine pour désactiver TLS 1.1. Si vous ne spécifiez pas le protocole SecurityProtocol, les protocoles de système d'exploitation sous-jacents sont utilisés, mais ils semblent être les moins sécurisés et non les plus sécurisés. Étant donné que plusieurs services s'exécutent à partir de la machine, je ne peux pas configurer le système d'exploitation pour utiliser uniquement TLS1.2, mais je veux toujours que ce client utilise TLS 1.2 et que TLS 1.3 soit capable de le modifier via une configuration spécifique.Spécification de SSL/TLS pour System.Net.HttpWebRequest via App.config
Cette question explique comment le faire via le code: How to specify SSL protocol to use for WebClient class
Cette question explique comment le faire via les paramètres du Registre pour toute la machine: Are there .NET implementation of TLS 1.2?
// this is what I want to avoid
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocol.Tls12;
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(request.GetRequestStream()))
{
sw.write(json);
}
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
using System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
{
content = sr.ReadToEnd();
}
Je n'ai rien dans mon App .config pour ce client actuellement mais c'est ce que je voudrais changer.
J'ai trouvé qu'il y a un élément sslStreamSecurity dans system.serviceModel, mais je crois que c'est pour ServiceReferences, pas HttpWebRequest normal. Je crois que cela est couvert par system.net mais je ne peux pas trouver un équivalent.
<system.serviceModel>
<bindings>
<customBinding>
<binding name="myBinding">
<sslStreamSecurity sslProtocls="Tls12">
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://myserver.com" binding="customBinding" bindingConfiguration="myBinding" name="myEndpoint" />
</client>
</system.ServiceModel>
Je suis assez ouvert à l'aide d'autre chose que HttpWebRequest/HttpWebResponse mais aimerait rester loin de l'installation des logiciels tiers. J'ai commencé un chemin avec System.Net.Http.HttpClient
qui semble plus récent que HttpWebRequest, mais a rapidement rencontré les mêmes problèmes.