症状
假设已升级到计算机上的 Microsoft .NET Framework 4.6。 使用将 SSL 3.0 与 ServicePointManager 或 SslStream API 一起使用的应用程序连接到服务器时,连接将失败。
原因
出现此问题的原因是 ServicePointManager 和 SslStream 使用的默认 SSL/TLS 协议集已更改。
旧值:Ssl 3.0 |Tls 1.0 |Tls 1.1
新值:Tls 1.0 |Tls 1.1 |Tls 1.2
解决方法
若要解决此问题,请将服务器更新为 Tls 1.0、Tls 1.1 或 Tls 1.2,因为 SSL 3.0 已显示不安全且容易受到 POODLE 等攻击。
注意 如果无法更新服务器,请使用 AppContext 类选择退出此功能。 为此,请使用下列方法之一:
以编程方式:必须是应用程序执行的第一项操作,因为 ServicePointManager 将仅初始化一次。 在应用程序中使用以下代码示例:
private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto"; AppContext.SetSwitch(DisableCachingName, true); AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);使用应用程序的 AppConfig 文件:将以下行添加到 Appconfig 文件:
<AppContextSwitchOverrides value=“Switch.System.Net.DontEnableSchUseStrongCrypto=true”/>
有关 .NET Framework 4.6 中的已知问题的详细信息,请参阅 .NET Framework 4.6 的已知问题。
详细信息
有关 .NET Framework 4.6 中的产品版本控制更改和影响的详细信息,请参阅 .NET Framework 4.6 中的应用程序兼容性。
便笺
仅当应用程序面向 .NET Framework 4.6 时,新配置才适用。 即使 .NET Framework 4.5.2 及更低版本在 .NET Framework 4.6 环境中运行,它们也不会受到影响。
受影响的顶级 API 列表:
- HttpClient、HttpWebRequest
- FtpClient
- SmtpClient
- SslStream
SCH_USE_STRONG_CRYPTO 此标志将在 .NET Framework 4.6 中自动使用,并通过删除不安全的加密和哈希算法来影响行为。 对于早于 Windows 10 的所有操作系统平台,RC4 算法将从使用中删除。 从 Windows 10,将删除以下其他不安全算法:DES、NULL、EXPORT 和 MD5