Sintomas
Suponha que atualizou para o Microsoft .NET Framework 4.6 no seu computador. Quando utiliza uma aplicação que utiliza o SSL 3.0 juntamente com as APIs ServicePointManager ou SslStream para ligar a um servidor, a ligação falha.
Causa
Este problema ocorre porque o conjunto predefinido de protocolos SSL/TLS utilizados pelo ServicePointManager e pelo SslStream foi alterado.
Valor antigo: Ssl 3.0 | Tls 1.0 | TLS 1.1
Novo valor: Tls 1.0 | Tls 1.1 | TLS 1.2
Solução
Para resolver este problema, atualize o servidor para Tls 1.0, Tls 1.1 ou Tls 1.2 porque o SSL 3.0 mostrou ser inseguro e vulnerável a ataques como POODLE.
Nota Se não conseguir atualizar o servidor, utilize a classe AppContext para optar ativamente por não participar nesta funcionalidade. Para tal, utilize um dos seguintes métodos:
Programaticamente: tem de ser a primeira coisa que a aplicação faz porque o ServicePointManager só será inicializada uma vez. Utilize o seguinte exemplo de código na sua aplicação:
private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto"; AppContext.SetSwitch(DisableCachingName, true); AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);Ao utilizar o ficheiro AppConfig para a sua aplicação: adicione a seguinte linha ao ficheiro Appconfig:
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"/>
Para obter mais informações sobre os problemas conhecidos no .NET Framework 4.6, consulte Problemas conhecidos do .NET Framework 4.6 .
Mais Informações
Para obter mais informações sobre as alterações ao controlo de versões do produto e o impacto no .NET Framework 4.6, veja Compatibilidade de Aplicações no .NET Framework 4.6.
Notas
A nova configuração só será aplicada quando a aplicação tiver como destino o .NET Framework 4.6. O .NET Framework 4.5.2 e versões anteriores não serão afetados mesmo que sejam executados num ambiente .NET Framework 4.6.
Uma lista das APIs de nível superior afetadas:
- HttpClient, HttpWebRequest
- FtpClient
- SmtpClient
- SslStream
SCH_USE_STRONG_CRYPTO Este sinalizador será automaticamente utilizado no .NET Framework 4.6 e afeta o comportamento ao remover algoritmos criptográficos e hash inseguros. Para todas as plataformas de sistema operativo anteriores Windows 10, o algoritmo RC4 será removido da utilização. A partir de Windows 10, os seguintes algoritmos não seguros adicionais serão removidos: DES, NULL, EXPORT e MD5