No se puede conectar a un servidor mediante las API de ServicePointManager o SslStream después de actualizar a .NET Framework 4.6

Se aplica a
.NET Framework 4.6.2

Síntomas

Supongamos que ha actualizado a Microsoft .NET Framework 4.6 en el equipo. Cuando utiliza una aplicación que utiliza SSL 3.0 junto con las API de ServicePointManager o SslStream para conectarse a un servidor, la conexión falla.

Causa

Este problema se produce porque se cambió el conjunto predeterminado de protocolos SSL/TLS que usan ServicePointManager y SslStream.

Valor anterior: SSL 3.0 | TLS 1.0 | TLS 1.1

      

Nuevo valor: TLS 1.0 | TLS 1.1 | TLS 1.2

Solución alternativa

Para solucionar este problema, actualice el servidor a Tls 1.0, Tls 1.1 o Tls 1.2 porque se ha demostrado que SSL 3.0 no es seguro y es vulnerable a ataques como POODLE.

Nota Si no puede actualizar el servidor, use la clase AppContext para no participar en esta característica. Para ello, utilice uno de los métodos siguientes:

  • Programáticamente: debe ser lo primero que haga la aplicación porque ServicePointManager se inicializará solo una vez. Utilice el ejemplo de código siguiente en su aplicación:

    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
            private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
            AppContext.SetSwitch(DisableCachingName, true);
            AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);
    
  • Mediante el archivo AppConfig para la aplicación: Agregue la línea siguiente al archivo Appconfig:
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"/>

        
Para obtener más información acerca de los problemas conocidos de .NET Framework 4.6, consulte Problemas conocidos de .NET Framework 4.6 .

Más información

Para obtener más información sobre los cambios en el control de versiones de productos y su impacto en .NET Framework 4.6, consulte Compatibilidad de aplicaciones en .NET Framework 4.6.

Notas

  • La nueva configuración solo se aplicará cuando la aplicación tenga como destino .NET Framework 4.6. .NET Framework 4.5.2 y versiones anteriores no se verán afectadas incluso si se ejecutan en un entorno de .NET Framework 4.6.

  • Una lista de las API de nivel superior afectadas:

    • HttpClient, HttpWebRequest
    • Cliente FTP
    • SmtpClient
    • Flujo de SSLSTREAM
  • SCH_USE_STRONG_CRYPTO Esta marca se usará automáticamente en .NET Framework 4.6 y afecta al comportamiento al eliminar los algoritmos criptográficos y hash no seguros. Para todas las plataformas de sistemas operativos anteriores a Windows 10, el algoritmo RC4 dejará de usarse. A partir de Windows 10, se quitarán los siguientes algoritmos no seguros adicionales: DES, NULL, EXPORT y MD5