Não é possível conectar-se a um servidor usando 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 você tenha atualizado para o Microsoft .NET Framework 4.6 em seu computador. Quando você usa um aplicativo que usa SSL 3.0 junto com ServicePointManager ou APIs SslStream para se conectar a um servidor, a conexão falha.

Causa

Esse problema ocorre porque o conjunto padrão de protocolos SSL/TLS usado 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 alternativa

Para contornar esse problema, atualize o servidor para Tls 1.0, Tls 1.1 ou Tls 1.2 porque o SSL 3.0 demonstrou ser inseguro e vulnerável a ataques como POODLE.

Observação Se você não puder atualizar o servidor, use a classe AppContext para desativar esse recurso. Para fazer isso, utilize um dos métodos seguintes:

  • Programaticamente: deve ser a primeira coisa que o aplicativo faz porque o ServicePointManager será inicializado apenas uma vez. Use o seguinte exemplo de código em seu aplicativo:

    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
            private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
            AppContext.SetSwitch(DisableCachingName, true);
            AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);
    
  • Usando o arquivo AppConfig para seu aplicativo: Adicione a seguinte linha ao arquivo 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 e o impacto do controle de versão do produto no .NET Framework 4.6, consulte Compatibilidade de aplicativos no .NET Framework 4.6.

Anotações

  • A nova configuração só se aplicará quando o aplicativo estiver direcionado ao .NET Framework 4.6. O .NET Framework 4.5.2 e as versões anteriores não serão afetadas, mesmo se forem executadas em um ambiente do .NET Framework 4.6.

  • Uma lista de APIs de nível superior afetadas:

    • HttpClient, HttpWebRequest
    • FtpClient
    • SmtpClient
    • Fluxo SslD
  • SCH_USE_STRONG_CRYPTO Esse sinalizador será usado automaticamente no .NET Framework 4.6 e afeta o comportamento removendo algoritmos criptográficos e de hash inseguros. Para todas as plataformas de sistema operacional anteriores ao Windows 10, o algoritmo RC4 será removido de uso. No Windows 10, os seguintes algoritmos não seguros adicionais serão removidos: DES, NULL, EXPORT e MD5