web-dev-qa-db-fra.com

Définition System.Net.SecurityProtocolType.Tls12 introuvable

J'essaie d'ajouter la ligne de code suivante au fichier Global.asax dans un projet de site Web.

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

IntelliSense vs2012 montre que la définition de Tls12 existe. Mais la construction dit que la définition n'existe pas (voir la capture d'écran). 

 screen shot

J'ai essayé d'ajouter System.Net.dll au dossier bin du projet, mais la construction a toujours échoué. Une idée de comment je pourrais être capable de résoudre ceci?

3
HockChai Lim

Êtes-vous sur .net 4.0? Vous devriez avoir au moins 4,5 pour l'utiliser. Vous pouvez essayer de mettre à jour la version de votre infrastructure cible Web: TLS 1.2 dans .NET Framework 4.0

9
Teoman shipahi

Les valeurs d'enum SecurityProtocolType.Tls11 et SecurityProtocolType.Tls12 sont manquantes sur Framework 4.0 uniquement. 

SecurityProtocolType valeurs numériques:
SystemDefault (0)
Ssl3 (48 - 0x30)
Tls (192 - 0xC0)
Tls11 (768 - 0x300) manquant dans Framework 4.0
Tls12 (3072 - 0xC00) manquant dans Framework 4.0 

Sous Framework 4.0, si vous souhaitez autoriser TLS 1.0, 1.1 et 1.2, remplacez simplement:

SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12  

par:

(SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
9
figolu

Vos préoccupations concernent la version de TLS que votre application (client) et le serveur que vous essayez de connecter utiliseront.

Directement cité de la norme RFC 5246 pour TLS.

  • Pendant ClientHello (première demande faite par le client au serveur)

    La version du protocole TLS par laquelle le client souhaite utiliser communiquer pendant cette session. Ceci devrait être le dernier (valeur la plus élevée) version prise en charge par le client.

  • Pendant ServerHello (première demande à laquelle le serveur répond)

    Ce champ contiendra le plus bas de celui suggéré par le client dans le client bonjour et le plus élevé pris en charge par le serveur.

ClientHello et ServerHello sont des structures avec des champs décrits dans la norme ici.

TL; DR

Lorsque vous utilisez System.Net.WebRequest, votre application négociera avec le serveur pour déterminer la version TLS la plus récente prise en charge par votre application et par le serveur, et l'utilisera.

Concernant votre question.

  • Vous pouvez trouver les versions de protocole TLS prises en charge par .NET ici mais veuillez vérifier la version du framework .NET que vous utilisez et naviguer jusqu'à la bonne version dans le msdn.
0
kuskmen

Le site Web est déjà sur .Net 4.5. La mise à jour ultérieure de Compilation> TargetFramework de 4.0 à 4.5 a résolu le problème pour moi.

Voici la configuration mise à jour

<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add Assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add Assembly="System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
  </assemblies>
</compilation>
0
krishna kanth