A versão do .NET Framework 3.5 SP1 e versões anteriores não forneceva suporte para as aplicações para utilizar as Versões Predefinida do Sistema Transport Layer Security (TLS) como um protocolo criptgráfico. Esta atualização permite a utilização de TLS v1.2 no .NET Framework 3.5 SP1.
NotaEste conteúdo foi disponibilizado na Atualização Windows Atualização. Para obter os conteúdos, Windows Atualizar para obter as atualizações .NET Framework recentes. Se o seu sistema estiver atualizado através Windows Update, não precisa de tomar medidas.
Resolução
Informações de transferência
A correção que corresponde à KB3154520 foi superada com as atualizações mais recentes do .NET Framework, que contêm todas as correções anteriormente incluídas na atualização KB3154520. Recomendamos a instalação das atualizações mais recentes do .NET Framework. Fizemos as seguintes melhorias nesta área:
-
As seguintes chaves de registo podem ser definidas para utilizar as predefinições do sistema operativo para SSL e TLS em vez das predefinições de .NET Framework hardcoded para uma aplicação gerida em execução no computador.
-
Para sistemas operativos de 64 bits:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 -
Para sistemas operativos de 32 bits:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
Nota Se a aplicação tiver definido o ServicePointManager.SecureProtocol em código ou através da configuração de ficheiros para um valor específico ou se utilizar as APIs SslStream.AuthenticateAs* para especificar um SslProtocols enum específico, o comportamento da definição de registo não ocorre.
-
-
Para além disso, adicionámos a enumeração SslProtocolsExtensions que pode utilizar como opção para definir TLS v1.2, TLS v1.1, bem como predefinições do sistema operativo para a propriedade ServicePointManager.SecurityProtocol ao direcionado para a versão 2.0 SP2 do .NET Framework. (Consulte a secção Orientação para Programadores para obter informações sobre como utilizar as extensões.)
Nota Windows Vista SP2 e Windows Server 2008 SP2 não suportam versões do protocolo Transport Layer Security (TLS) mais recentes do que 1.0. As aplicações geridas do .NET Framework 2.0 SP2 em execução no Windows Vista SP2 ou no Windows Server 2008 SP2 não podem utilizar o TLS 1.2 ou o TLS 1.1, mesmo que esses protocolos sejam definidos na propriedade ServicePointManager.SecurityProtocol.
Para obter mais informações sobre como transferir ficheiros de suporte da Microsoft, clique no seguinte número de artigo para ver o artigo na Base de Dados de Conhecimento Microsoft:
119591 Como obter ficheiros de suporte da Microsoft através de serviços online A Microsoft detetou vírus neste ficheiro. A Microsoft usou o software de deteção de vírus mais recente disponível na data em que o ficheiro foi publicado. O ficheiro é armazenado em servidores melhorados de segurança que ajudam a impedir alterações não autorizadas ao ficheiro.
Orientação para Programadores
A definição das novas extensões está nos seguintes ficheiros:
-
SecurityProtocolTypeExtensions.csnamespace System.Net
{ utilizar System.Security.Authentication; classe estática pública SecurityProtocolTypeExtensions { public const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12; public const SecurityProtocolType Tls11 = (SecurityProtocolType)SslProtocolsExtensions.Tls11; public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0; } } -
SslProtocolsExtensions.csnamespace System.Security.Authentication
{ classe estática pública SslProtocolsExtensions { massa pública SslProtocols Tls12 = (SslProtocols)0x00000C00; massa pública SslProtocols Tls11 = (SslProtocols)0x00000300; } }
Para incluir o suporte para o TLS v1.2, inclua os ficheiros de origem no seu projeto e, em seguida, defina a versão do protocolo através dos seguintes métodos:
-
As aplicações que utilizam APIs baseadas em ServicePointManager podem definir o protocolo da seguinte forma:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12; -
As aplicações que utilizam a sobrecarga SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) podem definir o valor SslProtocols como SslProtocolsExtensions.Tls12.
Se o registo mencionado no primeiro parágrafo estiver definido e na aplicação o valor SslProtocols estiver definido como SslProtocols.None, é selecionado o comportamento predefinido do sistema que irá depender da versão do sistema operativo Windows.
Além disso, quando estiver a alterar o código da aplicação para ativar o suporte para TLS v1.2 com .NET Framework 3.5 SP1, deve certificar-se de que nos computadores onde esta patch não está implementada lida com as seguintes exceções:-
Se a hotfix não estiver instalada, as APIs baseadas em ServicePointManager (HTTP, FTP, SMTP) irão ativar "System.NotSupportedException: O protocolo de segurança pedido não é suportado". quando a aplicação liga para ServicePointManager.SecurityProtocol para definir o novo valor.
-
Se a hotfix não estiver instalada, as APIs baseadas no SslStream serão atrasadas quando ligar para uma das APIs AutenticarAs*:
System.ArgumentException: O valor especificado não é válido na enumeração "SslProtocolType".
Nome do parâmetro: sslProtocolType
Nota Apenas para SslStream, uma combinação de Tls12, Tls11 com qualquer um dos Tls, Ssl3, Ssl2 (por exemplo: Tls12 | Tls11 | Os TLs) serão desatualizados de forma silenciosa para os protocolos existentes (por exemplo: TLs) num sistema sem a patch. A ligação será feita com TLs sem exceção.
Mais Informações
Para ativar o TLS v1.1 ou v1.2 como predefinições do sistema operativo, siga as instruções em https://technet.microsoft.com/en-us/library/dn786418(v=ws.11).aspx#BKMK_SchannelTR_TLS12. Nota: O TLS v1.1 e o v1.2 não estão disponíveis no Windows Vista ou Windows Server 2008. Se tiver de desativar as predefinições do sistema operativo definidas pela chave de registo mencionada anteriormente em aplicações específicas, pode fazê-lo ao adicionar a seguinte chave de registo:HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\v2.0.50727\System.Net.ServicePointManager.SystemDefaultTlsVersions <<Caminho completo do .exe para o ficheiro>> DWORD 0 C:\MyApp\MyApp.exe DWORD 0
Para obter mais informações sobre o TLS v1.2, consulte o artigo Introdução ao TLS v1.2. Depois de ativar a chave de registo SystemDefaultTlsVersions .NET, ocorre um comportamento diferente para cada versão do Windows, conforme apresentado na seguinte tabela.
Windows versão |
Cliente SSL2 |
SSL2 Server |
Cliente SSL3 |
SSL3 Server |
Cliente TLS 1.0 |
TLS 1.0 Server |
Cliente TLS 1.1 |
Servidor TLS 1.1 |
Cliente TLS 1.2 |
Servidor TLS 1.2 |
---|---|---|---|---|---|---|---|---|---|---|
Windows Vista SP2 e Windows Server 2008 SP2 |
Des desligado |
A |
A |
A |
A |
A |
N/D |
N/D |
N/D |
N/D |
Windows 7 SP1 e Windows Server 2008 R2 SP1 |
Des desligado |
A |
A |
A |
A |
A |
Des desligado |
Des desligado |
Des desligado |
Des desligado |
Windows Server 2012 |
Des desligado |
Des desligado |
A |
A |
A |
A |
A |
A |
A |
A |
Windows 8.1 e Windows Server 2012 R2 |
Des desligado |
Des desligado |
A |
A |
A |
A |
A |
A |
A |
A |
Windows 10 |
Des desligado |
Des desligado |
A |
A |
A |
A |
A |
A |
A |
A |
Windows 10 (1511) |
Des desligado |
Des desligado |
A |
A |
A |
A |
A |
A |
A |
A |
Windows 10 (1607) e Windows Server 2016 |
N/D |
N/D |
Des desligado |
Des desligado |
A |
A |
A |
A |
A |
A |