Meilleures pratiques du protocole TLS (Transport Layer Security) avec .NET FrameworkTransport Layer Security (TLS) best practices with the .NET Framework

Le protocole TLS (Transport Layer Security) est une norme industrielle conçue pour aider à protéger la confidentialité des informations communiquées sur Internet.The Transport Layer Security (TLS) protocol is an industry standard designed to help protect the privacy of information communicated over the Internet. TLS 1.2 est une norme qui fournit des améliorations de sécurité par rapport aux versions précédentes.TLS 1.2 is a standard that provides security improvements over previous versions. TLS 1.2 sera à terme remplacée par la norme la plus récente TLS 1.3 qui est plus rapide et améliore la sécurité.TLS 1.2 will eventually be replaced by the newest released standard TLS 1.3 which is faster and has improved security. Cet article présente les recommandations visant à sécuriser les applications .NET Framework qui utilisent le protocole TLS.This article presents recommendations to secure .NET Framework applications that use the TLS protocol.

Pour garantir que les applications .NET Framework restent sécurisées, la version TLS ne doit pas être codée en dur.To ensure .NET Framework applications remain secure, the TLS version should not be hardcoded. Les applications .NET Framework doivent utiliser la version TLS que prend en charge le système d’exploitation (OS)..NET Framework applications should use the TLS version the operating system (OS) supports.

Ce document est destiné aux développeurs qui :This document targets developers who are:

Nous vous recommandons de :We recommend that you:

  • cibler .NET Framework 4.7 ou versions ultérieures sur vos applicationsTarget .NET Framework 4.7 or later versions on your apps. cibler .NET Framework 4.7.1 ou versions ultérieures sur vos applications WCFTarget .NET Framework 4.7.1 or later versions on your WCF apps.
  • Ne spécifiez pas la version TLS.Do not specify the TLS version. Configurez votre code afin de laisser le système d’exploitation décider de la version TLS.Configure your code to let the OS decide on the TLS version.
  • Effectuez un audit complet du code pour vérifier que vous n’indiquez pas une version SSL ou TLS.Perform a thorough code audit to verify you're not specifying a TLS or SSL version.

Lorsque votre application permet au système d’exploitation de choisir la version TLS :When your app lets the OS choose the TLS version:

  • Elle bénéficie automatiquement de nouveaux protocoles ajoutés à l’avenir, tels que TLS 1.3.It automatically takes advantage of new protocols added in the future, such as TLS 1.3.
  • Le système d’exploitation bloque les protocoles qui sont découverts comme n’étant pas sécurisés.The OS blocks protocols that are discovered not to be secure.

La section Auditez votre code et apportez-lui des modifications couvre l’audit et la mise à jour de votre code.The section Audit your code and make code changes covers auditing and updating your code.

Cet article explique comment activer la sécurité maximale disponible pour la version de .NET Framework que votre application cible et sur laquelle elle s’exécute.This article explains how to enable the strongest security available for the version of the .NET Framework that your app targets and runs on. Lorsqu’une application définit explicitement une version et un protocole de sécurité, il refuse toute autre solution et le comportement de .NET Framework et du système d’exploitation par défaut.When an app explicitly sets a security protocol and version, it opts out of any other alternative, and opts out of .NET Framework and OS default behavior. Si vous souhaitez que votre application soit en mesure de négocier une connexion TLS 1.2, la définition explicite d’une version antérieure de TLS empêche une connexion TLS 1.2.If you want your app to be able to negotiate a TLS 1.2 connection, explicitly setting to a lower TLS version prevents a TLS 1.2 connection.

Si vous ne pouvez pas éviter de coder en dur une version de protocole, nous vous recommandons vivement de spécifier TLS 1.2.If you can't avoid hardcoding a protocol version, we strongly recommend that you specify TLS 1.2. Pour obtenir des conseils sur l’identification et la suppression des dépendances de TLS 1.0, téléchargez le livre blanc Résolution du problème de TLS 1.0.For guidance on identifying and removing TLS 1.0 dependencies, download the Solving the TLS 1.0 Problem whitepaper.

WCF prend en charge TLS1.0, 1.1 et 1.2 par la version par défaut dans .NET Framework 4.7.WCF Supports TLS1.0, 1.1 and 1.2 as the default in .NET Framework 4.7. À compter de .NET Framework 4.7.1, WCF passe à la version configurée du système d’exploitation par défaut.Starting with .NET Framework 4.7.1, WCF defaults to the operating system configured version. Si une application est explicitement configurée avec SslProtocols.None, WCF utilise le paramètre par défaut du système d’exploitation lors de l’utilisation du transport NetTcp.If an application is explicitly configured with SslProtocols.None, WCF uses the operating system default setting when using the NetTcp transport.

Vous pouvez poser des questions concernant ce document dans le problème GitHub Meilleures pratiques TLS (Transport Layer Security) avec .NET Framework.You can ask questions about this document in the GitHub issue Transport Layer Security (TLS) best practices with the .NET Framework.

Auditez votre code et apportez-lui des modificationsAudit your code and make code changes

Pour les applications ASP.NET, inspectez l’élément <system.web><httpRuntime targetFramework> de web.config pour vérifier que vous utilisez la version du .NET Framework.For ASP.NET applications, inspect the <system.web><httpRuntime targetFramework> element of web.config to verify you're using the intended version of the .NET Framework.

Pour Windows Forms et autres applications, consultez Guide pratique pour Cibler une version du .NET Framework.For Windows Forms and other applications, see How to: Target a Version of the .NET Framework.

Utilisez les sections suivantes pour vérifier que vous n’utilisez pas une version spécifique de SSL ou TLS.Use the following sections to verify you're not using a specific TLS or SSL version.

Si votre application cible .NET Framework 4.7 ou versions ultérieuresIf your app targets .NET Framework 4.7 or later versions

Les sections suivantes indiquent comment vérifier que vous n’utilisez pas une version spécifique de SSL ou TLS.The following sections show how to verify you're not using a specific TLS or SSL version.

Pour la mise en réseau HTTPFor HTTP networking

ServicePointManager, à l’aide de .NET Framework 4.7 et versions ultérieures, la valeur par défaut est le système d’exploitation en choisissant le meilleur protocole de sécurité et la meilleure version.ServicePointManager, using .NET Framework 4.7 and later versions, defaults to the OS choosing the best security protocol and version. Pour obtenir le meilleur système d’exploitation par défaut, si possible, ne définissez pas de valeur pour la propriété SecurityProtocol.To get the default OS best choice, if possible, don't set a value for the SecurityProtocol property. Sinon, attribuez-lui la valeur SystemDefault.Otherwise, set it to SystemDefault.

Le reste de cet article ne s’applique pas lorsque vous ciblez .NET Framework 4.7 ou versions ultérieures pour la mise en réseau HTTP.The remainder of this article is not relevant when targeting .NET Framework 4.7 or later versions for HTTP networking.

Pour la mise en réseau des sockets TCPFor TCP sockets networking

SslStream, à l’aide de .NET Framework 4.7 et versions ultérieures, la valeur par défaut est le système d’exploitation en choisissant le meilleur protocole de sécurité et la meilleure version.SslStream, using .NET Framework 4.7 and later versions, defaults to the OS choosing the best security protocol and version. Pour obtenir le meilleur système d’exploitation par défaut, si possible, n’utilisez pas les surcharges de méthode de SslStream qui accepte un paramètre SslProtocols explicite.To get the default OS best choice, if possible, don't use the method overloads of SslStream that take an explicit SslProtocols parameter. Sinon, passez SslProtocols.None.Otherwise, pass SslProtocols.None. Nous vous recommandons de ne pas utiliser Default ; le paramètre SslProtocols.Default force l’utilisation de SSL 3.0 /TLS 1.0 et empêche celle de TLS 1.2.We recommend that you don't use Default; setting SslProtocols.Default forces the use of SSL 3.0 /TLS 1.0 and prevents TLS 1.2.

Ne définissez pas une valeur pour la propriété SecurityProtocol (pour la mise en réseau HTTP).Don't set a value for the SecurityProtocol property (for HTTP networking).

N’utilisez pas les surcharges de méthode de SslStream qui accepte un paramètre SslProtocols explicite (pour la mise en réseau des sockets TCP).Don't use the method overloads of SslStream that take an explicit SslProtocols parameter (for TCP sockets networking). Lorsque vous reciblez votre application vers .NET Framework 4.7 ou versions ultérieures, vous suivez les recommandations de meilleures pratiques.When you retarget your app to .NET Framework 4.7 or later versions, you'll be following the best practices recommendation.

Le reste de cette rubrique ne s’applique pas lorsque vous ciblez .NET Framework 4.7 ou versions ultérieures pour la mise en réseau des sockets TCP.The remainder of this topic is not relevant when targeting .NET Framework 4.7 or later versions for TCP sockets networking.

Pour le transport TCP de WCF utilisant la sécurité de transport avec des informations d’identification de certificatFor WCF TCP transport using transport security with certificate credentials

WCF utilise la même pile de mise en réseau que le reste de .NET Framework.WCF uses the same networking stack as the rest of the .NET Framework.

Si vous ciblez 4.7.1, WCF est configuré pour autoriser le système d’exploitation à choisir le meilleur protocole de sécurité par défaut, sauf s’il est configuré de manière explicite :If you are targeting 4.7.1, WCF is configured to allow the OS to choose the best security protocol by default unless explicitly configured:

  • Dans votre fichier de configuration de l'application.In your application configuration file.
  • Ou, dans votre application du code source.Or, in your application in the source code.

Par défaut, .NET Framework 4.7 et versions ultérieures est configuré pour utiliser TLS 1.2 et autorise les connexions à l’aide de TLS 1.1 ou TLS 1.0.By default, .NET Framework 4.7 and later versions is configured to use TLS 1.2 and allows connections using TLS 1.1 or TLS 1.0. Configurez WCF pour autoriser le système d’exploitation à choisir le meilleur protocole de sécurité en configurant votre liaison pour utiliser SslProtocols.None.Configure WCF to allow the OS to choose the best security protocol by configuring your binding to use SslProtocols.None. Sa valeur définie peut être SslProtocols.This can be set on SslProtocols. SslProtocols.None est accessible à partir de Transport.SslProtocols.None can be accessed from Transport. NetTcpSecurity.Transport est accessible à partir de Security.NetTcpSecurity.Transport can be accessed from Security.

Si vous utilisez une liaison personnalisée :If you're using a custom binding:

  • Configurez WCF pour autoriser le système d’exploitation à choisir le meilleur protocole de sécurité en configurant SslProtocols pour utiliser SslProtocols.None.Configure WCF to allow the OS to choose the best security protocol by setting SslProtocols to use SslProtocols.None.
  • Ou configurez le protocole utilisé avec le chemin d’accès à la configuration system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols.Or configure the protocol used with the configuration path system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols.

Si vous n’utilisez pas de liaison personnalisée et que vous définissez votre liaison WCF à l’aide de la configuration, définissez le protocole utilisé avec le chemin d’accès à configuration system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocols.If you're not using a custom binding and you're setting your WCF binding using configuration, set the protocol used with the configuration path system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocols.

Pour la sécurité du message WCF avec les informations d’identification de certificatFor WCF Message Security with certificate credentials

.NET Framework 4.7 et versions ultérieures utilise par défaut le protocole spécifié dans la propriété SecurityProtocol..NET Framework 4.7 and later versions by default uses the protocol specified in the SecurityProtocol property. Lorsque AppContextSwitch Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols est défini sur true, WCF choisit le meilleur protocole, jusqu'à TLS 1.0.When the AppContextSwitch Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols is set to true, WCF chooses the best protocol, up to TLS 1.0.

Si votre application cible une version de .NET Framework antérieure à 4.7If your app targets a .NET Framework version earlier than 4.7

Auditez votre code pour vérifier que vous ne définissez pas une version spécifique de SSL ou TLS à l’aide des sections suivantes :Audit your code to verify you're not setting a specific TLS or SSL version using the following sections:

Pour le .NET Framework 4.6 - 4.6.2 et pas pour WCFFor .NET Framework 4.6 - 4.6.2 and not WCF

Définissez le commutateur DontEnableSystemDefaultTlsVersions AppContext sur false.Set the DontEnableSystemDefaultTlsVersions AppContext switch to false. Consultez Configuration de la sécurité via des commutateurs AppContext.See Configuring security via AppContext switches.

Pour WCF utilisant .NET Framework 4.6 - 4.6.2, utilisant la sécurité de transport avec des informations d’identification de certificatFor WCF using .NET Framework 4.6 - 4.6.2 using TCP transport security with Certificate Credentials

Vous devez installer les derniers correctifs du système d’exploitation.You must install the latest OS patches. Consultez Mises à jour de sécurité.See Security updates.

L’infrastructure WCF choisit automatiquement le protocole le plus élevé disponible, jusque TLS 1.2, à moins de configurer explicitement une version de protocole.The WCF framework automatically chooses the highest protocol available up to TLS 1.2 unless you explicitly configure a protocol version. Pour plus d’informations, consultez la section précédente Pour le transport TCP de WCF utilisant la sécurité de transport avec les informations d’identification de certificat.For more information, see the preceding section For WCF TCP transport using transport security with certificate credentials.

Pour .NET Framework 3.5 - 4.5.2 et pas pour WCFFor .NET Framework 3.5 - 4.5.2 and not WCF

Nous vous recommandons de mettre à niveau votre application avec .NET Framework 4.7 ou versions ultérieures.We recommend you upgrade your app to .NET Framework 4.7 or later versions. Si vous ne pouvez pas mettre à niveau, procédez comme suit.If you cannot upgrade, take the following steps. À un moment donné dans le futur, votre application peut échouer jusqu'à ce que vous mettiez à niveau avec .NET Framework 4.7 ou versions ultérieures.At some point in the future, your application may fail until you upgrade to .NET Framework 4.7 or later versions.

Définissez les clés de Registre SchUseStrongCrypto et SystemDefaultTlsVersions sur 1.Set the SchUseStrongCrypto and SystemDefaultTlsVersions registry keys to 1. Consultez Configuration de la sécurité via le Registre Windows.See Configuring security via the Windows Registry. La version 3.5 de .NET Framework prend en charge l’indicateur SchUseStrongCrypto uniquement lorsqu’une valeur explicite de TLS est passée.The .NET Framework version 3.5 supports the SchUseStrongCrypto flag only when an explicit TLS value is passed.

Si vous exécutez sur .NET Framework 3.5, vous devez installer un correctif à chaud pour que TLS 1.2 puisse être spécifié par votre programme :If you are running on .NET Framework 3.5, you need to install a hot patch so that TLS 1.2 can be specified by your program:

KB3154518KB3154518 Cumul de fiabilité HR-1605 - Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5.1 sur Windows 7 SP1 et Server 2008 R2 SP1Reliability Rollup HR-1605 - Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1
KB3154519KB3154519 Cumul de fiabilité HR-1605 - Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5 sur Windows Server 2012Reliability Rollup HR-1605 - Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows Server 2012
KB3154520KB3154520 Cumul de fiabilité HR-1605 - Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5 sur Windows 8.1 et Windows Server 2012 R2Reliability Rollup HR-1605 -Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2
KB3156421KB3156421 1605 correctif cumulatif 3154521 pour .NET Framework 4.5.2 et 4.5.1 sur Windows1605 Hotfix rollup 3154521 for the .NET Framework 4.5.2 and 4.5.1 on Windows

Pour WCF utilisant .NET Framework 3.5 - 4.5.2, utilisant la sécurité de transport TCP avec des informations d’identification de certificatFor WCF using .NET Framework 3.5 - 4.5.2 using TCP transport security with Certificate Credentials

Ces versions de l’infrastructure WCF sont codées en dur pour utiliser les valeurs SSL 3.0 et TLS 1.0.These versions of the WCF framework are hardcoded to use values SSL 3.0 and TLS 1.0. Ces valeurs ne peuvent pas être modifiées.These values cannot be changed. Vous devez mettre à jour et recibler vers NET Framework 4.6 ou versions ultérieures pour utiliser TLS 1.1 et 1.2.You must update and retarget to NET Framework 4.6 or later versions to use TLS 1.1 and 1.2.

Si votre application cible .NET Framework 3.5If your app targets .NET Framework 3.5

Si vous devez définir explicitement un protocole de sécurité au lieu de laisser .NET Framework ou le système d’exploitation sélectionner le protocole de sécurité, ajoutez les énumérations SecurityProtocolTypeExtensions et SslProtocolsExtension à votre code.If you must explicitly set a security protocol instead of letting the .NET framework or the OS pick the security protocol, add SecurityProtocolTypeExtensions and SslProtocolsExtension enumerations to your code. SecurityProtocolTypeExtensions et SslProtocolsExtension incluent des valeurs pour la valeur Tls12, Tls11 et SystemDefault.SecurityProtocolTypeExtensions and SslProtocolsExtension include values for Tls12, Tls11, and the SystemDefault value. Consultez Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5 sur Windows 8.1 et Windows Server 2012 R2.See Support for TLS System Default Versions included in .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2.

Configuration de la sécurité via des commutateurs AppContext (pour .NET Framework 4.6 ou versions ultérieures)Configuring security via AppContext switches (for .NET Framework 4.6 or later versions)

Les commutateurs AppContext décrits dans cette section s’appliquent si votre application cible ou s’exécute sur .NET Framework 4.6 ou versions ultérieures.The AppContext switches described in this section are relevant if your app targets, or runs on, .NET Framework 4.6 or later versions. Par défaut ou s’ils sont définis explicitement, les commutateurs doivent être false si possible.Whether by default, or by setting them explicitly, the switches should be false if possible. Si vous souhaitez configurer la sécurité via un ou les deux commutateurs, ne spécifiez pas de valeur du protocole de sécurité dans votre code ; ceci pourrait écraser le ou les commutateurs.If you want to configure security via one or both switches, then don't specify a security protocol value in your code; doing so would override the switch(es).

Les commutateurs ont le même effet, que vous procédiez à la mise en réseau HTTP (ServicePointManager) ou à la mise en réseau des sockets TCP (SslStream).The switches have the same effect whether you're doing HTTP networking (ServicePointManager) or TCP sockets networking (SslStream).

Switch.System.Net.DontEnableSchUseStrongCryptoSwitch.System.Net.DontEnableSchUseStrongCrypto

La valeur de false pour Switch.System.Net.DontEnableSchUseStrongCrypto incite votre application à utiliser un chiffrement fort.A value of false for Switch.System.Net.DontEnableSchUseStrongCrypto causes your app to use strong cryptography. La valeur de false pour DontEnableSchUseStrongCrypto utilise des protocoles de réseau plus sécurisés (TLS 1.2, TLS 1.1 et TLS 1.0) et bloque les protocoles qui ne sont pas sécurisés.A value of false for DontEnableSchUseStrongCrypto uses more secure network protocols (TLS 1.2, TLS 1.1, and TLS 1.0) and blocks protocols that are not secure. Pour plus d’informations, consultez L’indicateur SCH_USE_STRONG_CRYPTO.For more info, see The SCH_USE_STRONG_CRYPTO flag. La valeur de true désactive le chiffrement fort pour votre application.A value of true disables strong cryptography for your app.

Si votre application cible .NET Framework 4.6 ou versions ultérieures, la valeur par défaut de ce commutateur est false.If your app targets .NET Framework 4.6 or later versions, this switch defaults to false. Il s’agit d’une valeur par défaut sécurisée, que nous vous recommandons.That's a secure default, which we recommend. Si votre application s’exécute sur .NET Framework 4.6, mais cible une version antérieure, la valeur par défaut du commutateur est true.If your app runs on .NET Framework 4.6, but targets an earlier version, the switch defaults to true. Dans ce cas, vous devez le définir explicitement sur false.In that case, you should explicitly set it to false.

DontEnableSchUseStrongCrypto doit uniquement avoir une valeur de true si vous avez besoin de vous connecter à d’anciens services qui ne prennent pas en charge le chiffrement fort et ne peuvent pas être mis à niveau.DontEnableSchUseStrongCrypto should only have a value of true if you need to connect to legacy services that don't support strong cryptography and can't be upgraded.

Switch.System.Net.DontEnableSystemDefaultTlsVersionsSwitch.System.Net.DontEnableSystemDefaultTlsVersions

La valeur de false pour Switch.System.Net.DontEnableSystemDefaultTlsVersions incite votre application à autoriser le système d’exploitation à choisir le protocole.A value of false for Switch.System.Net.DontEnableSystemDefaultTlsVersions causes your app to allow the operating system to choose the protocol. Une valeur de true incite votre application à utiliser des protocoles sélectionnés par .NET Framework.A value of true causes your app to use protocols picked by the .NET Framework.

Si votre application cible .NET Framework 4.7 ou versions ultérieures, la valeur par défaut de ce commutateur est false.If your app targets .NET Framework 4.7 or later versions, this switch defaults to false. Il s’agit d’une valeur par défaut sécurisée, que nous vous recommandons.That's a secure default that we recommend. Si votre application s’exécute sur .NET Framework 4.7 ou versions ultérieures, mais cible une version antérieure, la valeur par défaut du commutateur est true.If your app runs on .NET Framework 4.7 or later versions, but targets an earlier version, the switch defaults to true. Dans ce cas, vous devez le définir explicitement sur false.In that case, you should explicitly set it to false.

Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocolsSwitch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols

La valeur de false pour Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols incite votre application à utiliser la valeur définie dans ServicePointManager.SecurityProtocols pour la sécurité du message à l’aide des informations d’identification du certificat.A value of false for Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols causes your application to use the value defined in ServicePointManager.SecurityProtocols for message security using certificate credentials. La valeur de true utilise le protocole le plus élevé disponible, jusque TLS1.0A value of true uses the highest protocol available, up to TLS1.0

Pour les applications ciblant le .NET Framework 4.7 et versions ultérieures, cette valeur par défaut est false.For applications targeting .NET Framework 4.7 and later versions, this value defaults to false. Pour les applications ciblant .NET Framework 4.6.2 et versions antérieures, cette valeur par défaut est true.For applications targeting .NET Framework 4.6.2 and earlier, this value defaults to true.

Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersionsSwitch.System.ServiceModel.DontEnableSystemDefaultTlsVersions

La valeur de false pour Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions incite la configuration par défaut à autoriser le système d’exploitation à choisir le protocole.A value of false for Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions sets the default configuration to allow the operating system to choose the protocol. La valeur de true utilise le protocole le plus élevé disponible par défaut, jusque TLS1.2.A value of true sets the default to the highest protocol available, up to TLS1.2.

Pour les applications ciblant le .NET Framework 4.7.1 et versions ultérieures, cette valeur par défaut est false.For applications targeting .NET Framework 4.7.1 and later versions, this value defaults to false. Pour les applications ciblant .NET Framework 4.7 et versions antérieures, cette valeur par défaut est true.For applications targeting .NET Framework 4.7 and earlier, this value defaults to true.

Pour plus d’informations sur les protocoles TLS, consultez Atténuation : protocoles TLS.For more information about TLS protocols, see Mitigation: TLS Protocols. Pour plus d'informations sur les commutateurs AppContext, consultez <AppContextSwitchOverrides> Element.For more information about AppContext switches, see <AppContextSwitchOverrides> Element.

Configuration de la sécurité via le Registre WindowsConfiguring security via the Windows Registry

Avertissement

La définition des clés de Registre affecte toutes les applications sur le système.Setting registry keys affects all applications on the system. Utilisez cette option uniquement si vous contrôlez entièrement l’ordinateur et pouvez contrôler les modifications apportées au Registre.Use this option only if you are in full control of the machine and can control changes to the registry.

Si la définition d’un ou des deux commutateurs AppContext n’est pas possible, vous pouvez contrôler les protocoles de sécurité utilisés par votre application avec les clés de Registre Windows décrites dans cette section.If setting one or both AppContext switches isn't an option, you can control the security protocols that your app uses with the Windows Registry keys described in this section. Vous ne pouvez peut-être pas utiliser un ou les deux commutateurs AppContext si votre application s’exécute sur .NET Framework 4.5.2 ou une version antérieure, ou si vous ne pouvez pas modifier le fichier de configuration.You might not be able to use one or both the AppContext switches if your app runs on .NET Framework 4.5.2 or earlier versions, or if you can't edit the configuration file. Si vous souhaitez configurer la sécurité avec le registre, ne spécifiez pas de valeur du protocole de sécurité dans votre code ; ceci écrase le paramètre du registre.If you want to configure security with the registry, don't specify a security protocol value in your code; doing so overrides the registry setting.

Les noms des clés de Registre sont similaires aux noms des commutateurs AppContext correspondants, mais sans un DontEnable ajouté au nom.The names of the registry keys are similar to the names of the corresponding AppContext switches but without a DontEnable prepended to the name. Par exemple, le AppContext commutateur DontEnableSchUseStrongCrypto est la clé de Registre appelée SchUseStrongCrypto.For example, the AppContext switch DontEnableSchUseStrongCrypto is the registry key called SchUseStrongCrypto.

Ces clés sont disponibles dans toutes les versions .NET Framework pour lesquelles il existe un correctif de sécurité récent.These keys are available in all .NET Framework versions for which there's a recent security patch. Consultez Mises à jour de sécurité.See Security updates.

Toutes les clés de Registre décrites ci-dessous ont le même effet, que vous procédiez à la mise en réseau HTTP (ServicePointManager) ou à la mise en réseau des sockets TCP (SslStream).All of the registry keys described below have the same effect whether you're doing HTTP networking (ServicePointManager) or TCP sockets networking (SslStream).

SchUseStrongCryptoSchUseStrongCrypto

La clé de Registre HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto a une valeur de type DWORD.The HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto registry key has a value of type DWORD. La valeur de 1 incite votre application à utiliser un chiffrement fort.A value of 1 causes your app to use strong cryptography. Le chiffrement fort utilise des protocoles de réseau plus sécurisés (TLS 1.2, TLS 1.1 et TLS 1.0) et bloque les protocoles qui ne sont pas sécurisés.The strong cryptography uses more secure network protocols (TLS 1.2, TLS 1.1, and TLS 1.0) and blocks protocols that are not secure. La valeur de 0 désactive le chiffrement fort.A value of 0 disables strong cryptography. Pour plus d’informations, consultez L’indicateur SCH_USE_STRONG_CRYPTO.For more information, see The SCH_USE_STRONG_CRYPTO flag.

Si votre application cible .NET Framework 4.6 ou versions ultérieures, la valeur par défaut de cette clé est 1.If your app targets .NET Framework 4.6 or later versions, this key defaults to a value of 1. Il s’agit d’une valeur par défaut sécurisée, que nous vous recommandons.That's a secure default that we recommend. Si votre application s’exécute sur .NET Framework 4.6, mais cible une version antérieure, la valeur par défaut de la clé est 0.If your app runs on .NET Framework 4.6, but targets an earlier version, then the key defaults to 0. Dans ce cas, vous devez le définir explicitement sa valeur sur 1.In that case, you should explicitly set its value to 1.

Cette clé doit uniquement avoir une valeur de 0 si vous avez besoin de vous connecter à d’anciens services qui ne prennent pas en charge le chiffrement fort et ne peuvent pas être mis à niveau.This key should only have a value of 0 if you need to connect to legacy services that don't support strong cryptography and can't be upgraded.

SystemDefaultTlsVersionsSystemDefaultTlsVersions

La clé de Registre HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions a une valeur de type DWORD.The HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions registry key has a value of type DWORD. La valeur de 1 incite votre application à autoriser le système d’exploitation à choisir le protocole.A value of 1 causes your app to allow the operating system to choose the protocol. Une valeur de 0 incite votre application à utiliser des protocoles sélectionnés par .NET Framework.A value of 0 causes your app to use protocols picked by the .NET Framework.

<VERSION> doit être v4.0.30319 (pour .NET Framework 4 et versions ultérieures) ou v2.0.50727 (pour .NET Framework 3.5).<VERSION> must be v4.0.30319 (for .NET Framework 4 and above) or v2.0.50727 (for .NET Framework 3.5).

Si votre application cible .NET Framework 4.7 ou versions ultérieures, la valeur par défaut de cette clé est 1.If your app targets .NET Framework 4.7 or later versions, this key defaults to a value of 1. Il s’agit d’une valeur par défaut sécurisée, que nous vous recommandons.That's a secure default that we recommend. Si votre application s’exécute sur .NET Framework 4.7 ou versions ultérieures, mais cible une version antérieure, la valeur par défaut de la clé est 0.If your app runs on .NET Framework 4.7 or later versions, but targets an earlier version, the key defaults to 0. Dans ce cas, vous devez le définir explicitement sa valeur sur 1.In that case, you should explicitly set its value to 1.

Pour plus d’informations, consultez Mise à jour cumulative pour Windows 10 Version 1511 et Windows Server 2016 Technical Preview 4 : 10 mai 2016.For more info, see Cumulative Update for Windows 10 Version 1511 and Windows Server 2016 Technical Preview 4: May 10, 2016.

Pour plus d’informations sur .NET Framework 3.5.1, consultez Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5.1 sur Windows 7 SP1 et Server 2008 R2 SP1.For more information with .NET framework 3.5.1, see Support for TLS System Default Versions included in .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1.

Le fichier . REG suivant définit les clés de Registre et leurs variantes sur leurs valeurs les plus sûres :The following .REG file sets the registry keys and their variants to their most safe values:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

Configuration des protocoles Schannel dans le Registre WindowsConfiguring Schannel protocols in the Windows Registry

Vous pouvez utiliser le Registre pour un contrôle affiné sur les protocoles négociés par votre application client et/ou serveur.You can use the registry for fine-grained control over the protocols that your client and/or server app negotiates. La mise en réseau de votre application passe par Schannel (qui est un autre nom pour un Canal sécurisé.Your app's networking goes through Schannel (which is another name for Secure Channel. En configurant Schannel, vous pouvez configurer le comportement de votre application.By configuring Schannel, you can configure your app's behavior.

Démarrez avec la clé de Registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.Start with the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols registry key. Sous cette clé, vous pouvez créer toutes les sous-clés dans l’ensemble SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1 et TLS 1.2.Under that key you can create any subkeys in the set SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1, and TLS 1.2. Sous chacune de ces sous-clés, vous pouvez créer des sous-clés Client et/ou Server.Under each of those subkeys, you can create subkeys Client and/or Server. Sous Client et Server, vous pouvez créer des valeurs DWORD DisabledByDefault (0 ou 1) et Enabled (0 ou 0xFFFFFFFF).Under Client and Server, you can create DWORD values DisabledByDefault (0 or 1) and Enabled (0 or 0xFFFFFFFF).

L’indicateur SCH_USE_STRONG_CRYPTOThe SCH_USE_STRONG_CRYPTO flag

Lorsqu’elle est activée (par défaut, par un commutateur AppContext, ou par le Registre Windows), la version .NET Framework utilise l’indicateur SCH_USE_STRONG_CRYPTO lorsque votre application demande un protocole de sécurité TLS.When it's enabled (by default, by an AppContext switch, or by the Windows Registry), the .NET Framework uses the SCH_USE_STRONG_CRYPTO flag when your app requests a TLS security protocol. L’indicateur SCH_USE_STRONG_CRYPTO peut être activé par défaut, avec le commutateur AppContext ou avec le Registre.The SCH_USE_STRONG_CRYPTO flag can be enabled by default, with the AppContext switch, or with the Registry. Le système d’exploitation passe de l’indicateur sur Schannelpour lui demander de désactiver les algorithmes de chiffrement faibles connus, les suites de chiffrement et les versions du protocole TLS/SSL qui peuvent être également activées pour une meilleure interopérabilité.The OS passes the flag to Schannelto instruct it to disable known weak cryptographic algorithms, cipher suites, and TLS/SSL protocol versions that may be otherwise enabled for better interoperability. Pour plus d'informations, voir :For more information, see:

L’indicateur SCH_USE_STRONG_CRYPTO est également passé sur Schannel lorsque vous utilisez explicitement les valeurs énumérées Tls (TLS 1.0), Tls11 ou Tls12 de SecurityProtocolType ou SslProtocols.The SCH_USE_STRONG_CRYPTO flag is also passed to Schannel when you explicitly use the Tls (TLS 1.0), Tls11, or Tls12 enumerated values of SecurityProtocolType or SslProtocols.

Mises à jour de sécuritéSecurity updates

Les meilleures pratiques dans cet article varient selon les récentes mises à jour de sécurité installées.The best practices in this article depend on recent security updates being installed. Ces mises à jour incluent la possibilité d’utiliser les fonctionnalités avancées .NET Framework 4.7 et versions ultérieures.These updates include the ability to use advanced .NET Framework 4.7 and later features. Les récentes mises à jour de sécurité sont importantes si votre application s’exécute sur .NET Framework 4.7 et versions ultérieures (même si elle cible une version antérieure).Recent security updates are important if your app runs on .NET Framework 4.7 and later versions (even if it targets an earlier version).

Pour mettre à jour .NET Framework afin de permettre au système d’exploitation de choisir la meilleure version de TLS à utiliser, vous devez installer au moins :To update the .NET Framework to allow the operating system to choose the best version of TLS to use, you must install at least:

Voir aussi :See also:

Prise en charge de TLS 1.2Support for TLS 1.2

Pour que votre application négocie TLS 1.2, le système d’exploitation et la version de .NET Framework ont besoin de prendre en charge TLS 1.2.For your app to negotiate TLS 1.2, the OS and the .NET Framework version both need to support TLS 1.2.

Exigences du système d’exploitation pour prendre en charge TLS 1.2Operating system requirements to support TLS 1.2

Pour activer ou de réactiver TLS 1.2 et/ou TLS 1.1 sur un système qui les prend en charge, consultez Paramètres de Registre de TLS (Transport Layer Security).To enable or re-enable TLS 1.2 and/or TLS 1.1 on a system that supports them, see Transport Layer Security (TLS) registry settings.

Système d’exploitationOS Prise en charge de TLS 1.2TLS 1.2 support
Windows 10Windows 10
Windows Server 2016Windows Server 2016
Pris en charge et activé par défaut.Supported, and enabled by default.
Windows 8.1Windows 8.1
Windows Server 2012 R2Windows Server 2012 R2
Pris en charge et activé par défaut.Supported, and enabled by default.
Windows 8.0Windows 8.0
Windows Server 2012Windows Server 2012
Pris en charge et activé par défaut.Supported, and enabled by default.
Windows 7 SP1Windows 7 SP1
Windows Server 2008 R2 SP1Windows Server 2008 R2 SP1
Pris en charge, mais non activé par défaut.Supported, but not enabled by default. Consultez la page Web Paramètres de Registre de TLS (Transport Layer Security) pour plus d’informations sur le mode d’activation de TLS 1.2.See the Transport Layer Security (TLS) registry settings web page for details on how to enable TLS 1.2.
Windows Server 2008Windows Server 2008 La prise en charge de TLS 1.2 et TLS 1.1 requiert une mise à jour.Support for TLS 1.2 and TLS 1.1 requires an update. Consultez Mettre à jour pour ajouter la prise en charge de TLS 1.1 et TLS 1.2 dans Windows Server 2008 SP2.See Update to add support for TLS 1.1 and TLS 1.2 in Windows Server 2008 SP2.
Windows VistaWindows Vista Non pris en charge.Not supported.

Pour plus d’informations sur les protocoles TLS/SSL activés par défaut sur chaque version de Windows, consultez Protocoles dans TLS/SSL (Schannel SSP).For information about which TLS/SSL protocols are enabled by default on each version of Windows, see Protocols in TLS/SSL (Schannel SSP).

Exigences requises pour prendre en charge TLS 1.2 avec .NET Framework 3.5Requirements to support TLS 1.2 with .NET Framework 3.5

Ce tableau affiche la mise à jour du système d’exploitation dont vous avez besoin pour prendre en charge TLS 1.2 avec .NET Framework 3.5.This table shows the OS update you'll need to support TLS 1.2 with .NET Framework 3.5. Nous vous recommandons d'appliquer toutes les mises à jour du système d’exploitation.We recommend you apply all OS updates.

Système d’exploitationOS Mise à jour minimale nécessaire pour prendre en charge TLS 1.2 avec .NET Framework 3.5Minimum update needed to support TLS 1.2 with .NET Framework 3.5
Windows 10Windows 10
Windows Server 2016Windows Server 2016
Mise à jour cumulative pour Windows 10 Version 1511 et Windows Server 2016 Technical Preview 4 : 10 mai 2016Cumulative Update for Windows 10 Version 1511 and Windows Server 2016 Technical Preview 4: May 10, 2016
Windows 8.1Windows 8.1
Windows Server 2012 R2Windows Server 2012 R2
Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5 sur Windows 8.1 et Windows Server 2012 R2Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2
Windows 8.0Windows 8.0
Windows Server 2012Windows Server 2012
Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5 sur Windows Server 2012Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows Server 2012
Windows 7 SP1Windows 7 SP1
Windows Server 2008 R2 SP1Windows Server 2008 R2 SP1
Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 3.5.1 sur Windows 7 SP1 et Server 2008 R2 SP1Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1
Windows Server 2008Windows Server 2008 Prise en charge des versions par défaut du système TLS, inclues dans .NET Framework 2.0 SP2 sur Windows Vista SP2 et Server 2008 SP2Support for TLS System Default Versions included in the .NET Framework 2.0 SP2 on Windows Vista SP2 and Server 2008 SP2
Windows VistaWindows Vista Non pris en chargeNot supported

Azure Cloud ServicesAzure Cloud Services

Si vous utilisez les rôles de travail et Web Azure Cloud Services pour héberger et exécuter votre application, il existe des considérations dont vous avez besoin pour prendre en compte la prise en charge TLS 1.2.If you are using Azure Cloud Services Web and Worker roles to host and run your application, there are some considerations that you need to take into account to support TLS 1.2.

.NET Framework 4.7 n’est pas installé par défaut sur le système d’exploitation Azure Guest.NET Framework 4.7 is not installed on Azure Guest OS by default

La dernière version installée de la dernière version 5 de la famille du système d’exploitation Azure Guest (Windows Server 2016) est 4.6.2.The latest version installed in the latest Azure Guest OS Family 5 release (Windows Server 2016) is 4.6.2. Pour connaître les versions de .NET Framework sont installées sur chaque système d’exploitation Azure Guest, consultez la matrice de compatibilité des versions et du Kit de développement logiciel (SDK) du système d’exploitation invité de Azure Guest.To see which versions of .NET Framework are installed on each Azure Guest OS, see the Azure Guest OS releases and SDK compatibility matrix.

Si votre application cible une version de .NET Framework qui n’est pas disponible sur la version du système d’exploitation Azure Guest, vous devez l’installer vous-même.If your app targets a .NET Framework version that is not available on the Azure Guest OS version, then you need to install it yourself. Consultez installer .NET sur les rôles Azure Cloud Services.See Install .NET on Azure Cloud Service Roles. Si l’installation de l’infrastructure nécessite un redémarrage, les rôles de service peuvent également redémarrer avant de passer à l’état Prêt.If the framework installation requires a restart, the service roles might also restart before entering the Ready state.

Paramètres du Registre du système d’exploitation Azure GuestAzure Guest OS registry settings

L’image Family 5 du système d’exploitation Azure Guest pour Azure Cloud Services possède déjà la clé de Registre SchUseStrongCrypto est définie sur une valeur de 1.The Azure Guest OS Family 5 image for Azure Cloud Services already has the SchUseStrongCrypto registry key set to a value of 1. Pour plus d’informations, consultez SchUseStrongCrypto.For more information, see SchUseStrongCrypto.

Définissez la clé de Registre SystemDefaultTlsVersions sur 1.Set the SystemDefaultTlsVersions registry key to 1. Consultez Configuration de la sécurité via le Registre Windows.See Configuring security via the Windows Registry.