2017-07-28 1 views
13

Je dois utiliser TLS 1.2 pour me connecter à partir de mon service Web .NET à un autre qui va forcer TLS 1.2. J'ai trouvé une ressource qui disait que .NET 4.6 utilise TLS 1.2 par défaut, ce qui semblait être la solution la plus simple. J'ai mis à jour le framework .NET sur le serveur et redémarré. Dans IIS, j'ai essayé de créer un pool d'applications en utilisant .NET 4.6 mais la version 4.0 était la seule option. Ensuite, j'ai trouvé quelque chose qui dit qu'il dirait toujours 4.0 parce que 4.6 est une mise à jour "en place" pour .NET 4.0. Alors j'ai pensé que j'avais peut-être fini. Cependant sur une page d'erreur que j'ai eu pour des raisons sans rapport, il a dit Microsoft .NET Framework Version:4.0.30319 donc il semble que je n'ai pas mis à jour avec succès. Des pointeurs sur la façon de m'assurer que mon pool d'applications utilise .NET 4.6, ou plus généralement comment activer TLS 1.2?Mise à jour du service Web .NET pour utiliser TLS 1.2

+2

Je crois que TLS12 doit être activé sur le serveur. https://support.quovadisglobal.com/kb/a433/how-to-enable-tls-1_2-on-windows-server-2008-r2.aspx – lcryder

+0

Pourquoi les downvotes? – nasch

Répondre

16

En fait, nous venons de mettre à jour un service Web .NET à 4.6 pour autoriser TLS 1.2.

Ce que dit Artem est la première étape que nous avons franchie. Nous avons recompilé le framework du service web en 4.6 et nous avons essayé de changer la clé de registre pour activer TLS 1.2, bien que cela n'ait pas fonctionné: la connexion était toujours en TLS 1.0. De plus, nous ne voulions pas interdire SLL 3.0, TLS 1.0 ou TLS 1.1 sur la machine: d'autres services Web pourraient l'utiliser; nous avons annulé nos modifications sur le registre.

En fait, nous avons changé les fichiers Web.Config pour dire à IIS: "hé, lancez-moi dans 4.6 s'il vous plaît".

Voici les changements que nous avons ajoutés dans le web.config + recompilation dans .NET 4.6:

<system.web> 
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 --> 

    <!--Added this httpRuntime --> 
    <httpRuntime targetFramework="4.6" /> 

    <authentication mode="Windows"/> 
    <pages controlRenderingCompatibilityVersion="4.0"/> 
</system.web> 

Et la connexion TLS 1.2 changé, parce que IIS est maintenant en cours d'exécution du service Web en 4.6 (dit explicitement) et 4.6 utilise TLS 1.2 par défaut.

+0

Voici la documentation que nous avons utilisée pour la recherche: [HTTPRuntime] (https: // blogs .msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework /), [RenderingCompatibility] (https://msdn.microsoft.com/fr-fr/library/system.web.ui .control.renderingcompatibility (v = vs.110) .aspx) –

+0

J'ai apporté ces modifications à mon web.config, reconstruit, déployé, et j'obtiens System.Net.WebException: La requête a échoué avec une réponse vide. Je ne sais pas si c'est de ma part ou d'un problème de l'autre côté. Une idée de comment vérifier que j'utilise TLS 1.2? – nasch

+0

Vous pouvez utiliser un analyseur de protocole réseau, comme [Wireshark] (https://www.wireshark.org/) pour vérifier l'état de votre connexion. –

6

Ajoutez le code suivant avant instancier votre client de service Web:

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

Oui, je le fais déjà, mais le message d'erreur indique toujours .NET 4.0. – nasch

+6

C'est votre version CLR. Le .NET CLR a deux versions, 2.0 et 4.0. Dans IIS, vous spécifiez la version CLR, pas la version Framework. IIS ne vous le dira pas .Net 4.6 parce que cela ne l'intéresse pas. Si vous avez compilé en utilisant 4.6, alors vous utilisez 4.6. – Amy

4

Trois étapes nécessaires:

  1. marquer Explicitement SSL2.0, TLS1.0, TLS1.1 comme interdit sur votre machine serveur, en ajoutant Enabled=0 et DisabledByDefault=1 à votre registre (le chemin complet est HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols). Voir écran pour plus de détails registry

  2. permettent Explicitement TLS1.2 en suivant les étapes de 1. Il suffit d'utiliser respectivement Enabled=1 et DisabledByDefault=0.

REMARQUE: vérifier la version du serveur: Windows Server 2003 ne supporte pas le protocole TLS 1.2

  1. Activer TLS1.2 uniquement au niveau de l'application, comme suggéré ci-dessus Wu @John.

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

espère que ce guide aide.

+1

Référence officielle - https://technet.microsoft.com/en-us/library/dn786418(v=ws.11).aspx#BKMK_SchannelTR_TLS12 – Subbu