web-dev-qa-db-fra.com

Mettre à jour le service Web .NET pour utiliser TLS 1.2

Je dois utiliser TLS 1.2 pour me connecter de mon service Web .NET à un autre qui va forcer TLS 1.2. J'ai trouvé une ressource qui disait que .NET 4.6 utilisait 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 à l'aide de .NET 4.6, mais 4.0 était la seule option. Ensuite, j'ai trouvé quelque chose qui disait qu'il serait toujours dit 4.0 parce que 4.6 est une mise à jour "en place" vers .NET 4.0. Alors j'ai pensé que j'avais peut-être fini. Cependant, sur une page d'erreur que j'ai obtenue pour des raisons indépendantes, il est indiqué Microsoft .NET Framework Version:4.0.30319, il semble donc que la mise à niveau ne soit pas réussie. Des pointeurs sur la façon de vous assurer que mon pool d'applications utilise .NET 4.6 ou, plus généralement, sur l'activation de TLS 1.2?

56
nasch

En fait, nous venons de mettre à niveau un service Web .NET vers la version 4.6 pour permettre à TLS 1.2.

Ce que dit Artem sont les premiers pas que nous avons faits. Nous avons recompilé la structure du service Web à la version 4.6 et nous avons essayé de modifier la clé de registre pour activer TLS 1.2, bien que cela ne fonctionne pas: la connexion était toujours dans 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 utiliser cela; nous avons annulé nos modifications sur le registre.

Nous avons en fait modifié les fichiers Web.Config pour indiquer à IIS: "Hé, lancez-moi dans la version 4.6, s'il vous plaît".

Voici les modifications que nous avons ajoutées à la recompilation web.config + 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 a été remplacée par TLS 1.2, car IIS exécute maintenant le service Web en version 4.6 (explicitement) et 4.6 utilise TLS 1.2 par défaut.

82
Etienne Faucher

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

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

Ou pour une compatibilité ascendante avec TLS 1.1 et versions antérieures:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 
46
John Wu

si vous utilisez .Net avant la version 4.5, vous n'aurez pas Tls12 dans l'énumération, donc l'état est explicitement mentionné ici

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
14
bresleveloper

Trois étapes nécessaires:

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

  2. Activez explicitement TLS1.2 en suivant les étapes de 1. Utilisez simplement Enabled=1 et DisabledByDefault=0.

REMARQUE: vérifiez la version du serveur: Windows Server 2003 ne prend pas en charge le protocole TLS 1.2.

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

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

J'espère que ce guide vous aidera.

UPDATE Comme @Subbu l’a mentionné: Guide officiel

12
Artem

Pour moi ci-dessous travaillé:

Étape 1: Téléchargé et installé le programme d’installation Web à partir de https://www.Microsoft.com/en-us/download/details.aspx?id=48137 sur le serveur d'application. Redémarrage du serveur d'applications une fois l'installation terminée.

Étape 2: Ajoutés ci-dessous les modifications dans le web.config

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

Étape 3: Une fois les étapes 1 et 2 terminées, une erreur s'est produite: " WebForms UnobtrusiveValidationMode requiert un ScriptResourceMapping pour 'jquery'. Ajoutez un ScriptResourceMapping nommé jquery (sensible à la casse) "et pour résoudre cette erreur, j’ai ajouté la clé ci-dessous dans appsettings dans mon web.config fichier

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
3
KRM