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).
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?
Ê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
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)
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.
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>