症状
假设计算机上已升级到 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.6 环境中运行,.NET Framework 4.5.2 及更早版本也不会受到影响。
受影响的顶级 API 的列表:
- HttpClient、HttpWebRequest
- FtpClient
- SmtpClient
- SslStream
SCH_USE_STRONG_CRYPTO 此标志将在 .NET Framework 4.6 中自动使用,并通过删除不安全的加密和哈希算法来影响行为。 对于所有低于 Windows 10 的操作系统平台,RC4 算法将被从中使用中删除。 从 Windows 10 中,将删除以下其他不安全算法:DES、NULL、EXPORT 和 MD5