Não é possível ligar a um servidor com as APIs ServicePointManager ou SslStream após a atualização para o .NET Framework 4.6

Aplica-se A
.NET Framework 4.6.2

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