Melhores práticas do TLS (Transport Layer Security) com o .NET FrameworkTransport Layer Security (TLS) best practices with the .NET Framework

O protocolo TLS (Transport Layer Security) é um padrão da indústria projetado para ajudar a proteger a privacidade das informações comunicadas pela Internet.The Transport Layer Security (TLS) protocol is an industry standard designed to help protect the privacy of information communicated over the Internet. O TLS 1.2 é um padrão que fornece aprimoramentos de segurança em relação às versões anteriores.TLS 1.2 is a standard that provides security improvements over previous versions. Com o tempo, o TLS 1.2 será substituído pelo padrão mais recentemente lançado, o TLS 1.3, que é mais rápido e mais seguro.TLS 1.2 will eventually be replaced by the newest released standard TLS 1.3 which is faster and has improved security. Este artigo apresenta recomendações para proteger aplicativos .NET Framework que usam o protocolo TLS.This article presents recommendations to secure .NET Framework applications that use the TLS protocol.

Para garantir que os aplicativos .NET Framework continuem seguros, a versão do TLS não deve ser codificada.To ensure .NET Framework applications remain secure, the TLS version should not be hardcoded. Os aplicativos .NET Framework devem usar a versão do TLS compatível com o SO (sistema operacional)..NET Framework applications should use the TLS version the operating system (OS) supports.

Este documento é destinado a desenvolvedores que estejam:This document targets developers who are:

Recomendamos que você:We recommend that you:

  • Defina o .NET Framework 4.7 ou versões posteriores como destino nos seus aplicativos.Target .NET Framework 4.7 or later versions on your apps. Defina o .NET Framework 4.7.1 ou versões posteriores como destino nos seus aplicativos WCF.Target .NET Framework 4.7.1 or later versions on your WCF apps.
  • Não especifique a versão do protocolo TLS.Do not specify the TLS version. Configure seu código para permitir que o sistema operacional decida sobre a versão do protocolo TLS.Configure your code to let the OS decide on the TLS version.
  • Realize uma auditoria completa de código para verificar se que você não está especificando uma versão do protocolo TLS ou SSL.Perform a thorough code audit to verify you're not specifying a TLS or SSL version.

Quando seu aplicativo permite que o sistema operacional escolha a versão do protocolo TLS:When your app lets the OS choose the TLS version:

  • Ele aproveita automaticamente os novos protocolos adicionados no futuro, como o protocolo TLS 1.3.It automatically takes advantage of new protocols added in the future, such as TLS 1.3.
  • O sistema operacional bloqueia os protocolos que forem identificados como não seguros.The OS blocks protocols that are discovered not to be secure.

A seção Auditar seu código e fazer alterações no código aborda como auditar e atualizar seu código.The section Audit your code and make code changes covers auditing and updating your code.

Este artigo explica como habilitar a segurança máxima disponível para a versão do .NET Framework para a qual seu aplicativo é destinado e na qual é executado.This article explains how to enable the strongest security available for the version of the .NET Framework that your app targets and runs on. Quando um aplicativo define explicitamente um protocolo de segurança e versão, ele recusa qualquer outro dado alternativo e recusa o comportamento padrão do .NET Framework e sistema operacional.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. Se você quiser que seu aplicativo possa negociar uma conexão do TLS 1.2, configurar explicitamente para uma versão inferior do TLS impede uma conexão com o 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.

Se não puder evitar a codificação de uma versão do protocolo, recomendamos especificar o TLS 1.2.If you can't avoid hardcoding a protocol version, we strongly recommend that you specify TLS 1.2. Para obter orientações sobre como identificar e remover as dependências do TLS 1.0, baixe o white paper Solucionar o problema do TLS 1.0.For guidance on identifying and removing TLS 1.0 dependencies, download the Solving the TLS 1.0 Problem whitepaper.

O WCF dá suporte ao TLS 1.0, 1.1 e 1.2 como o padrão no .NET Framework 4.7.WCF Supports TLS1.0, 1.1 and 1.2 as the default in .NET Framework 4.7. A partir do .NET Framework 4.7.1, o WCF define a versão configurada do sistema operacional como padrão.Starting with .NET Framework 4.7.1, WCF defaults to the operating system configured version. Se um aplicativo for explicitamente configurado com SslProtocols.None, o WCF usará a configuração do sistema operacional padrão ao usar o transporte NetTcp.If an application is explicitly configured with SslProtocols.None, WCF uses the operating system default setting when using the NetTcp transport.

É possível fazer perguntas sobre este documento na questão do GitHub Melhores práticas do TLS (Transport Layer Security) com o .NET Framework.You can ask questions about this document in the GitHub issue Transport Layer Security (TLS) best practices with the .NET Framework.

Auditar seu código e fazer alterações no códigoAudit your code and make code changes

Para aplicativos ASP.NET, inspecione o elemento <system.web><httpRuntime targetFramework> de web.config para verificar se você está usando a versão desejada do .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.

Para o Windows Forms e outros aplicativos, confira Como definir a uma versão do .NET Framework como destino.For Windows Forms and other applications, see How to: Target a Version of the .NET Framework.

Use as seções a seguir para verificar se você não está usando uma versão específica do TLS ou SSL.Use the following sections to verify you're not using a specific TLS or SSL version.

Se o aplicativo definir o .NET Framework 4.7 ou versões posteriores como destinoIf your app targets .NET Framework 4.7 or later versions

As seções a seguir para mostram como verificar se você não está usando uma versão específica do TLS ou SSL.The following sections show how to verify you're not using a specific TLS or SSL version.

Para rede HTTPFor HTTP networking

ServicePointManager, usando o .NET Framework 4,7 e versões posteriores, o usará o protocolo de segurança padrão configurado no sistema operacional.ServicePointManager, using .NET Framework 4.7 and later versions, will use the default security protocol configured in the OS. Para obter a opção de sistema operacional padrão, se possível, não defina um valor para a propriedade ServicePointManager.SecurityProtocol, que usa como padrão SecurityProtocolType.SystemDefault.To get the default OS choice, if possible, don't set a value for the ServicePointManager.SecurityProtocol property, which defaults to SecurityProtocolType.SystemDefault.

Como a configuração de SecurityProtocolType.SystemDefault faz com que o ServicePointManager use o protocolo de segurança padrão configurado pelo sistema operacional, seu aplicativo pode ser executado de forma diferente com base no sistema operacional em que é executado.Because the SecurityProtocolType.SystemDefault setting causes the ServicePointManager to use the default security protocol configured by the operating system, your application may run differently based on the OS it's run on. Por exemplo, o Windows 7 SP1 usa o TLS 1,0 enquanto o Windows 8 e o Windows 10 usam o TLS 1,2.For example, Windows 7 SP1 uses TLS 1.0 while Windows 8 and Windows 10 use TLS 1.2.

O restante deste artigo não é relevante ao definir o .NET Framework 4.7 ou versões posteriores como destino para uma rede HTTP.The remainder of this article is not relevant when targeting .NET Framework 4.7 or later versions for HTTP networking.

Para rede de soquetes TCPFor TCP sockets networking

O SslStream, usando o .NET Framework 4.7 e versões posteriores, define como padrão o sistema operacional com o melhor protocolo de segurança e versão.SslStream, using .NET Framework 4.7 and later versions, defaults to the OS choosing the best security protocol and version. Para obter a melhor opção padrão de sistema operacional, se possível, não use as sobrecargas do método de SslStream que levam um parâmetro SslProtocols explícito.To get the default OS best choice, if possible, don't use the method overloads of SslStream that take an explicit SslProtocols parameter. Caso contrário, passe SslProtocols.None.Otherwise, pass SslProtocols.None. Recomendamos não usar o Default; configurar o SslProtocols.Default força o uso do SSL 3.0 /TLS 1.0 e impede o 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.

Não defina um valor para a propriedade SecurityProtocol (para a rede HTTP).Don't set a value for the SecurityProtocol property (for HTTP networking).

Não use as sobrecargas de método do SslStream que levam um parâmetro SslProtocols explícito (para rede de soquetes TCP).Don't use the method overloads of SslStream that take an explicit SslProtocols parameter (for TCP sockets networking). Ao redirecionar seu aplicativo para o .NET Framework 4.7 ou versões posteriores, você estará seguindo a recomendação de melhores práticas.When you retarget your app to .NET Framework 4.7 or later versions, you'll be following the best practices recommendation.

O restante deste tópico não é relevante ao definir o .NET Framework 4.7 ou versões posteriores como destino para uma rede de soquetes TCP.The remainder of this topic is not relevant when targeting .NET Framework 4.7 or later versions for TCP sockets networking.

Para o transporte de TCP do WCF usando a segurança de transporte com credenciais de certificadoFor WCF TCP transport using transport security with certificate credentials

O WCF usa a mesma pilha de rede do restante do .NET Framework.WCF uses the same networking stack as the rest of the .NET Framework.

Se você estiver definindo o 4.7.1 como destino, o WCF é configurado para permitir que o sistema operacional escolha o melhor protocolo de segurança por padrão, a menos que explicitamente configurado: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:

  • No seu arquivo de configuração do aplicativo.In your application configuration file.
  • Ou, no seu aplicativo no código-fonte.Or, in your application in the source code.

Por padrão, o .NET Framework 4.7 e versões posteriores são configuradas para usar o TLS 1.2 e permite conexões usando o 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. Configure o WCF para permitir que o sistema operacional escolha o melhor protocolo de segurança configurando a associação para usar SslProtocols.None.Configure WCF to allow the OS to choose the best security protocol by configuring your binding to use SslProtocols.None. Isso pode ser definido em SslProtocols.This can be set on SslProtocols. SslProtocols.None pode ser acessado em Transport.SslProtocols.None can be accessed from Transport. NetTcpSecurity.Transport pode ser acessado em Security.NetTcpSecurity.Transport can be accessed from Security.

Se você estiver usando uma associação personalizada:If you're using a custom binding:

  • Configure o WCF para permitir que o sistema operacional escolha o melhor protocolo de segurança configurando SslProtocols para usar SslProtocols.None.Configure WCF to allow the OS to choose the best security protocol by setting SslProtocols to use SslProtocols.None.
  • Ou configure o protocolo usado com o caminho de configuração system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols.Or configure the protocol used with the configuration path system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols.

Se você não estiver utilizando uma associação personalizada e estiver definindo sua associação do WCF usando a configuração, defina o protocolo usado com o caminho de configuração 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.

Para Segurança de Mensagens do WCF com as credenciais de certificadoFor WCF Message Security with certificate credentials

O .NET Framework 4.7 e versões posteriores usam por padrão o protocolo especificado na propriedade SecurityProtocol..NET Framework 4.7 and later versions by default uses the protocol specified in the SecurityProtocol property. Quando o AppContextSwitch Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols é definido como true, o WCF escolhe o melhor protocolo, até o TLS 1.0.When the AppContextSwitch Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols is set to true, WCF chooses the best protocol, up to TLS 1.0.

Se o aplicativo definir uma versão do .NET Framework anterior à 4.7 como destinoIf your app targets a .NET Framework version earlier than 4.7

Audite seu código para verificar se você não está configurando uma versão específica do protocolo TLS ou SSL usando as seguintes seções:Audit your code to verify you're not setting a specific TLS or SSL version using the following sections:

Para o .NET Framework 4.6 – 4.6.2 e não WCFFor .NET Framework 4.6 - 4.6.2 and not WCF

Defina a opção DontEnableSystemDefaultTlsVersions AppContext como false.Set the DontEnableSystemDefaultTlsVersions AppContext switch to false. Confira Configurar a segurança por meio de opções do AppContext.See Configuring security via AppContext switches.

Para o WCF usando o .NET Framework 4.6 – 4.6.2 usando a segurança de transporte do TCP com Credenciais de CertificadoFor WCF using .NET Framework 4.6 - 4.6.2 using TCP transport security with Certificate Credentials

Você deve instalar os patches mais recentes do sistema operacional.You must install the latest OS patches. Confira Atualizações de segurança.See Security updates.

A estrutura do WCF escolhe automaticamente o maior protocolo disponível até o TLS 1.2, a menos que você configure explicitamente uma versão do protocolo.The WCF framework automatically chooses the highest protocol available up to TLS 1.2 unless you explicitly configure a protocol version. Para saber mais, confira a seção anterior Para transporte de TCP do WCF usando a segurança de transporte com credenciais de certificado.For more information, see the preceding section For WCF TCP transport using transport security with certificate credentials.

Para o .NET Framework 3.5 a 4.5.2 e não o WCFFor .NET Framework 3.5 - 4.5.2 and not WCF

Recomendamos atualizar seu aplicativo para o .NET Framework 4.7 ou versões posteriores.We recommend you upgrade your app to .NET Framework 4.7 or later versions. Se não for possível atualizar, execute as etapas a seguir.If you cannot upgrade, take the following steps. Em um determinado momento no futuro, seu aplicativo poderá falhar até você atualizar para o .NET Framework 4.7 ou versões posteriores.At some point in the future, your application may fail until you upgrade to .NET Framework 4.7 or later versions.

Defina as chaves do Registro SchUseStrongCrypto e SystemDefaultTlsVersions como 1.Set the SchUseStrongCrypto and SystemDefaultTlsVersions registry keys to 1. Confira Como configurar a segurança por meio do Registro do Windows.See Configuring security via the Windows Registry. A versão 3.5 do .NET Framework só dá suporte ao sinalizador SchUseStrongCrypto quando um valor explícito de TLS é passado.The .NET Framework version 3.5 supports the SchUseStrongCrypto flag only when an explicit TLS value is passed.

Se você estiver executando no .NET Framework 3.5, será preciso instalar uma aplicação de patch para que o TLS 1.2 possa ser especificado pelo seu programa: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 Pacote Cumulativo de Atualizações de Confiabilidade HR-1605 – Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5.1 no Windows 7 SP1 e 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 Pacote Cumulativo de Atualizações de Confiabilidade HR-1605 – Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5 no Windows Server 2012Reliability Rollup HR-1605 - Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows Server 2012
KB3154520KB3154520 Pacote Cumulativo de Atualizações de Confiabilidade HR-1605 – Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5 no Windows 8.1 e 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 Pacote Cumulativo de Atualizações 3154521 de Hotfix 1605 para o .NET Framework 4.5.2 e 4.5.1 no Windows1605 Hotfix rollup 3154521 for the .NET Framework 4.5.2 and 4.5.1 on Windows

Para o WCF usando o .NET Framework 3.5 – 4.5.2 usando a segurança de transporte do TCP com Credenciais de CertificadoFor WCF using .NET Framework 3.5 - 4.5.2 using TCP transport security with Certificate Credentials

Essas versões da estrutura do WCF são codificadas para usar valores do protocolo SSL 3.0 e TLS 1.0.These versions of the WCF framework are hardcoded to use values SSL 3.0 and TLS 1.0. Esses valores não podem ser alterados.These values cannot be changed. É preciso atualizar e redirecionar para o .NET Framework 4.6 ou versões posteriores para usar o TLS 1.1 e 1.2.You must update and retarget to NET Framework 4.6 or later versions to use TLS 1.1 and 1.2.

Se o aplicativo definir o .NET Framework 3.5 como destinoIf your app targets .NET Framework 3.5

Se você precisa definir explicitamente um protocolo de segurança em vez de deixar o .NET Framework ou o sistema operacional escolhê-lo, adicione as enumerações SecurityProtocolTypeExtensions e SslProtocolsExtension ao seu código.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 e SslProtocolsExtension incluem valores para Tls12, Tls11 e o valor SystemDefault.SecurityProtocolTypeExtensions and SslProtocolsExtension include values for Tls12, Tls11, and the SystemDefault value. Confira Suporte para versões padrão do sistema TLS incluídas no .NET Framework 3.5 no Windows 8.1 e 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.

Como configurar a segurança por meio das opções AppContext (para o .NET Framework 4.6 ou versões posteriores)Configuring security via AppContext switches (for .NET Framework 4.6 or later versions)

As opções AppContext descritas nesta seção serão relevantes se o aplicativo for destinado ou executado no .NET Framework 4.6 ou versões posteriores.The AppContext switches described in this section are relevant if your app targets, or runs on, .NET Framework 4.6 or later versions. Seja por padrão ou definindo-as explicitamente, as opções devem ser false se possível.Whether by default, or by setting them explicitly, the switches should be false if possible. Se você quiser configurar a segurança por meio de uma ou ambas as opções, não especifique um valor de protocolo de segurança no seu código; isso pode substituir as opções.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).

As opções têm o mesmo efeito, seja para uma rede HTTP (ServicePointManager) ou uma rede de soquetes 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

Um valor false para Switch.System.Net.DontEnableSchUseStrongCrypto faz com que seu aplicativo use criptografia forte.A value of false for Switch.System.Net.DontEnableSchUseStrongCrypto causes your app to use strong cryptography. Um valor false para DontEnableSchUseStrongCrypto usa protocolos de rede mais seguros (TLS 1.2, TLS 1.1 e TLS 1.0) e bloqueia protocolos não seguros.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. Para saber mais, confira O sinalizador SCH_USE_STRONG_CRYPTO.For more info, see The SCH_USE_STRONG_CRYPTO flag. Um valor true desabilita uma criptografia forte para o aplicativo.A value of true disables strong cryptography for your app.

Se o aplicativo for destinado ao .NET Framework 4.6 ou versões posteriores, essa opção será definida como false por padrão.If your app targets .NET Framework 4.6 or later versions, this switch defaults to false. Esse é um padrão seguro que recomendamos.That's a secure default, which we recommend. Se o aplicativo for executado em .NET Framework 4.6, mas for destinado a uma versão anterior, a opção será definida como true por padrão.If your app runs on .NET Framework 4.6, but targets an earlier version, the switch defaults to true. Nesse caso, defina-a explicitamente como false.In that case, you should explicitly set it to false.

DontEnableSchUseStrongCrypto só deve ter um valor true se você precisar se conectar a serviços herdados que não suportem criptografia forte e não possam ser atualizados.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

Um valor false para Switch.System.Net.DontEnableSystemDefaultTlsVersions faz com que seu aplicativo permita que o sistema operacional escolha o protocolo.A value of false for Switch.System.Net.DontEnableSystemDefaultTlsVersions causes your app to allow the operating system to choose the protocol. Um valor true faz com que seu aplicativo use protocolos escolhidos pelo .NET Framework.A value of true causes your app to use protocols picked by the .NET Framework.

Se o aplicativo for destinado ao .NET Framework 4.7 ou versões posteriores, essa opção será definida como false por padrão.If your app targets .NET Framework 4.7 or later versions, this switch defaults to false. Esse é um padrão seguro que recomendamos.That's a secure default that we recommend. Se o aplicativo for executado no .NET Framework 4.7 ou versões posteriores, mas for destinado a uma versão anterior, a opção será definida como true por padrão.If your app runs on .NET Framework 4.7 or later versions, but targets an earlier version, the switch defaults to true. Nesse caso, defina-a explicitamente como false.In that case, you should explicitly set it to false.

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

Um valor false para Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols faz com que seu aplicativo use o valor definido no ServicePointManager.SecurityProtocols para segurança de mensagem usando credenciais de certificado.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. Um valor true usa o maior protocolo disponível, até o TLS1.0A value of true uses the highest protocol available, up to TLS1.0

Para aplicativos destinados ao .NET Framework 4.7 e versões posteriores, o valor padrão é false.For applications targeting .NET Framework 4.7 and later versions, this value defaults to false. Para aplicativos destinados ao .NET Framework 4.6.2 e versões anteriores, o valor padrão é true.For applications targeting .NET Framework 4.6.2 and earlier, this value defaults to true.

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

Um valor false para Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions define a configuração padrão para permitir que o sistema operacional escolha o protocolo.A value of false for Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions sets the default configuration to allow the operating system to choose the protocol. Um valor true define o padrão como o maior protocolo disponível, até o TLS1.2.A value of true sets the default to the highest protocol available, up to TLS1.2.

Para aplicativos destinados ao .NET Framework 4.7.1 e versões posteriores, o valor padrão é false.For applications targeting .NET Framework 4.7.1 and later versions, this value defaults to false. Para aplicativos destinados ao .NET Framework 4.7 e versões anteriores, o valor padrão é true.For applications targeting .NET Framework 4.7 and earlier, this value defaults to true.

Para saber mais sobre os protocolos TLS, confira Mitigação: protocolos TLS.For more information about TLS protocols, see Mitigation: TLS Protocols. Para saber mais sobre as opções AppContext, confira <AppContextSwitchOverrides> Element.For more information about AppContext switches, see <AppContextSwitchOverrides> Element.

Como configurar a segurança por meio do Registro do WindowsConfiguring security via the Windows Registry

Aviso

Definir as chaves do Registro afeta todos os aplicativos no sistema.Setting registry keys affects all applications on the system. Use esta opção somente se você estiver no controle total do computador e puder controlar as alterações ao Registro.Use this option only if you are in full control of the machine and can control changes to the registry.

Se configurar uma ou ambas as opções AppContext não for uma opção, será possível controlar os protocolos de segurança que seu aplicativo usa com as chaves do Registro do Windows descritas nesta seção.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. Você não poderá usar uma ou ambas as opções AppContext se o aplicativo executar no .NET Framework 4.5.2 ou anterior ou se não for possível editar o arquivo de configuração.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. Se você quiser configurar a segurança com o Registro, não especifique um valor de protocolo de segurança no seu código; isso substituirá a configuração do Registro.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.

Os nomes das chaves do Registro são similares aos nomes das opções AppContext correspondentes, mas sem um DontEnable anexado ao nome.The names of the registry keys are similar to the names of the corresponding AppContext switches but without a DontEnable prepended to the name. Por exemplo, a opção AppContext DontEnableSchUseStrongCrypto é a chave do Registro chamada SchUseStrongCrypto.For example, the AppContext switch DontEnableSchUseStrongCrypto is the registry key called SchUseStrongCrypto.

Essas chaves estão disponíveis em todas as versões do .NET Framework para as quais há um patch de segurança recente.These keys are available in all .NET Framework versions for which there's a recent security patch. Confira Atualizações de segurança.See Security updates.

Todas as chaves do Registro descritas abaixo têm o mesmo efeito, seja para uma rede HTTP (ServicePointManager) ou uma rede de soquetes 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

A chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto tem um valor do tipo DWORD.The HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto registry key has a value of type DWORD. Um valor 1 faz com que seu aplicativo use criptografia forte.A value of 1 causes your app to use strong cryptography. A criptografia forte usa protocolos de rede mais seguros (TLS 1.2, TLS 1.1 e TLS 1.0) e bloqueia protocolos não seguros.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. Um valor 0 desabilita a criptografia forte.A value of 0 disables strong cryptography. Para saber mais, confira O sinalizador SCH_USE_STRONG_CRYPTO.For more information, see The SCH_USE_STRONG_CRYPTO flag.

Se o aplicativo for destinado ao .NET Framework 4.6 ou versões posteriores, o valor dessa chave será definido como 1 por padrão.If your app targets .NET Framework 4.6 or later versions, this key defaults to a value of 1. Esse é um padrão seguro que recomendamos.That's a secure default that we recommend. Se o aplicativo for executado em .NET Framework 4.6, mas for destinado a uma versão anterior, a chave será definida como 0 por padrão.If your app runs on .NET Framework 4.6, but targets an earlier version, then the key defaults to 0. Nesse caso, defina o valor explicitamente como 1.In that case, you should explicitly set its value to 1.

Essa chave só deve ter um valor 0 se você precisar se conectar a serviços herdados que não deem suporte à criptografia forte e não possam ser atualizados.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

A chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions tem um valor do tipo DWORD.The HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions registry key has a value of type DWORD. Um valor 1 faz com que seu aplicativo permita que o sistema operacional escolha o protocolo.A value of 1 causes your app to allow the operating system to choose the protocol. Um valor 0 faz com que seu aplicativo use protocolos escolhidos pelo .NET Framework.A value of 0 causes your app to use protocols picked by the .NET Framework.

A <VERSION> deve ser v4.0.30319 (para o .NET Framework 4 e superior) ou v2.0.50727 (para .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).

Se o aplicativo for destinado ao .NET Framework 4.7 ou versões posteriores, o valor dessa chave será definido como 1 por padrão.If your app targets .NET Framework 4.7 or later versions, this key defaults to a value of 1. Esse é um padrão seguro que recomendamos.That's a secure default that we recommend. Se o aplicativo for executado no .NET Framework 4.7 ou versões posteriores, mas for destinado a uma versão anterior, a chave será definida como 0 por padrão.If your app runs on .NET Framework 4.7 or later versions, but targets an earlier version, the key defaults to 0. Nesse caso, defina o valor explicitamente como 1.In that case, you should explicitly set its value to 1.

Para saber mais, confira Atualização Cumulativa para Windows 10 Versão 1511 e Windows Server 2016 Technical Preview 4: 10 de maio de 2016.For more info, see Cumulative Update for Windows 10 Version 1511 and Windows Server 2016 Technical Preview 4: May 10, 2016.

Para saber mais sobre o .NET Framework 3.5.1, confira Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5.1 no Windows 7 SP1 e 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.

O arquivo .REG a seguir define as chaves do Registro e suas variantes para seus valores mais seguros: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

Configurar os protocolos Schannel no Registro do WindowsConfiguring Schannel protocols in the Windows Registry

Você pode usar o registro para um controle refinado sobre os protocolos que seu aplicativo servidor e/ou cliente negocia.You can use the registry for fine-grained control over the protocols that your client and/or server app negotiates. A rede do seu aplicativo passa pelo Schannel (que é outro nome para Canal Seguro.Your app's networking goes through Schannel (which is another name for Secure Channel. Configurando o Schannel, é possível configurar o comportamento do seu aplicativo.By configuring Schannel, you can configure your app's behavior.

Comece com a chave do Registro do HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.Start with the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols registry key. Sob essa chave, é possível criar qualquer subchave no conjunto SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1 e 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. Em cada uma dessas subchaves, é possível criar subchaves Client e/ou Server.Under each of those subkeys, you can create subkeys Client and/or Server. Em Client e Server, é possível criar valores DWORD DisabledByDefault (0 ou 1) e Enabled (0 ou 0xFFFFFFFF).Under Client and Server, you can create DWORD values DisabledByDefault (0 or 1) and Enabled (0 or 0xFFFFFFFF).

O sinalizador SCH_USE_STRONG_CRYPTOThe SCH_USE_STRONG_CRYPTO flag

Quando ele é habilitado (por padrão, por uma opção AppContext ou pelo Registro do Windows), o .NET Framework usa o sinalizador SCH_USE_STRONG_CRYPTO quando seu aplicativo solicita o protocolo de segurança 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. O sinalizador SCH_USE_STRONG_CRYPTO pode ser habilitado por padrão, com a opção AppContext ou com o Registro.The SCH_USE_STRONG_CRYPTO flag can be enabled by default, with the AppContext switch, or with the Registry. O sistema operacional passa o sinalizador para o Schannel para instruí-lo a desativar algoritmos criptográficos fracos conhecidos, pacotes de codificação e versões do protocolo TLS/SSL que possam ser habilitadas para uma melhor interoperabilidade.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. Para obter mais informações, consulte:For more information, see:

O sinalizador SCH_USE_STRONG_CRYPTO também é transmitido para o Schannel quando você usa explicitamente valores enumerados do 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.

Atualizações de segurançaSecurity updates

As melhores práticas neste artigo dependem da instalação de atualizações de segurança recentes.The best practices in this article depend on recent security updates being installed. Essas atualizações incluem a capacidade de usar recursos avançados do .NET Framework 4.7 e posterior.These updates include the ability to use advanced .NET Framework 4.7 and later features. As atualizações de segurança recentes são importantes se o aplicativo é executado no .NET Framework 4.7 e em versões posteriores (mesmo se ele for destinado a uma versão anterior).Recent security updates are important if your app runs on .NET Framework 4.7 and later versions (even if it targets an earlier version).

Para atualizar o .NET Framework para permitir que o sistema operacional escolha a versão recomendada do TLS a ser usada, instale pelo menos:To update the .NET Framework to allow the operating system to choose the best version of TLS to use, you must install at least:

Confira também:See also:

Suporte para o TLS 1.2Support for TLS 1.2

Para que seu aplicativo negocie o TLS 1.2, o sistema operacional e a versão do .NET Framework precisam dar suporte ao 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.

Requisitos do sistema operacional para dar suporte ao TLS 1.2Operating system requirements to support TLS 1.2

Para habilitar ou reabilitar o TLS 1.2 e/ou o TLS 1.1 em um sistema compatível com eles, confira Configurações do Registro do TLS (protocolo TLS).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.

Sistema operacionalOS Suporte ao TLS 1.2TLS 1.2 support
Windows 10Windows 10
Windows Server 2016Windows Server 2016
Com suporte e habilitado por padrão.Supported, and enabled by default.
Windows 8.1Windows 8.1
Windows Server 2012 R2Windows Server 2012 R2
Com suporte e habilitado por padrão.Supported, and enabled by default.
Windows 8.0Windows 8.0
Windows Server 2012Windows Server 2012
Com suporte e habilitado por padrão.Supported, and enabled by default.
Windows 7 SP1Windows 7 SP1
Windows Server 2008 R2 SP1Windows Server 2008 R2 SP1
Com suporte, mas não habilitado por padrão.Supported, but not enabled by default. Veja a página da Web Configurações do Registro do TLS (protocolo TLS) para obter detalhes sobre como habilitar o 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 O suporte ao protocolo TLS 1.2 e TLS 1.1 requer uma atualização.Support for TLS 1.2 and TLS 1.1 requires an update. Confira Atualizar para adicionar suporte ao protocolo TLS 1.1 e TLS 1.2 no 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 Sem suporte.Not supported.

Para saber mais sobre quais protocolos TLS/SSL são habilitados por padrão em cada versão do Windows, confira Protocolos no 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).

Requisitos para suporte ao protocolo TLS 1.2 com .NET Framework 3.5Requirements to support TLS 1.2 with .NET Framework 3.5

Esta tabela mostra a atualização do sistema operacional que você precisará para dar suporte ao protocolo TLS 1.2 com o .NET Framework 3.5.This table shows the OS update you'll need to support TLS 1.2 with .NET Framework 3.5. Recomendamos aplicar todas as atualizações do sistema operacional.We recommend you apply all OS updates.

Sistema operacionalOS Atualização mínima necessária para dar suporte ao TLS 1.2 com .NET Framework 3.5Minimum update needed to support TLS 1.2 with .NET Framework 3.5
Windows 10Windows 10
Windows Server 2016Windows Server 2016
Atualização Cumulativa para Windows 10 Versão 1511 e Windows Server 2016 Technical Preview 4: 10 de maio de 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
Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5 no Windows 8.1 e 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
Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5 no 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
Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 3.5.1 no Windows 7 SP1 e 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 Suporte para Versões Padrão do Sistema TLS incluídas no .NET Framework 2.0 SP2 no Windows Vista SP2 e 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 Sem suporteNot supported

Serviços de Nuvem do AzureAzure Cloud Services

Se você está usando as funções de Trabalho e Web dos Serviços de Nuvem do Azure para hospedar e executar seu aplicativo, há algumas considerações que você precisa levar em conta para dar suporte ao 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.

O .NET Framework 4.7 não é instalado no Sistema Operacional Convidado do Azure por padrão.NET Framework 4.7 is not installed on Azure Guest OS by default

A versão mais recente instalada na última versão do Sistema Operacional Convidado para Família 5 do Azure (Windows Server 2016) é 4.6.2.The latest version installed in the latest Azure Guest OS Family 5 release (Windows Server 2016) is 4.6.2. Para ver quais versões do .NET Framework estão instaladas em cada Sistema Operacional Convidado do Azure, confira as Versões do Sistema Operacional de Convidado do Azure e matriz de compatibilidade do SDK.To see which versions of .NET Framework are installed on each Azure Guest OS, see the Azure Guest OS releases and SDK compatibility matrix.

Se o aplicativo for destinado a uma versão do .NET Framework que não esteja disponível na versão do Sistema Operacional Convidado do Azure, será preciso instalá-la por conta própria.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. Confira Instalar o .NET em Funções de Serviços de Nuvem do Azure.See Install .NET on Azure Cloud Service Roles. Se a instalação da estrutura exigir uma reinicialização, as funções de serviço também podem ser reiniciadas antes de entrar no estado Pronto.If the framework installation requires a restart, the service roles might also restart before entering the Ready state.

Configurações de registro do Sistema Operacional Convidado do AzureAzure Guest OS registry settings

A imagem de Família de SOs Convidados 5 do Azure para os Serviços de Nuvem do Azure já tem a chave do Registro SchUseStrongCrypto definida com um valor 1.The Azure Guest OS Family 5 image for Azure Cloud Services already has the SchUseStrongCrypto registry key set to a value of 1. Para saber mais, confira SchUseStrongCrypto.For more information, see SchUseStrongCrypto.

Defina a chave do Registro SystemDefaultTlsVersions como 1.Set the SystemDefaultTlsVersions registry key to 1. Confira Como configurar a segurança por meio do Registro do Windows.See Configuring security via the Windows Registry.