无法连接到一台服务器升级到.NET Framework 4.6 后使用 ServicePointManager 或 SslStream Api

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3069494
症状
假设您已在您的计算机上升级到 Microsoft.NET Framework 4.6。您在使用的应用程序使用 SSL 3.0 与ServicePointManagerSslStream Api 来连接到服务器时连接失败。
原因
出现此问题是因为ServicePointManagerSslStream使用 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"></AppContextSwitchOverrides>


有关.NET Framework 4.6 中的已知问题 对于.NET Framework 4.6 的已知的问题.
更多信息
有关的产品的版本控制更改和.NET Framework 4.6 中的影响 在.NET Framework 4.6 中应用程序兼容性.

备注:
  • 当应用程序面向.NET Framework 46 只适用新的配置。.NET Framework 4.5.2 和早期的 versionswill 不会影响即使他们在.NET Framework 4.6 环境中运行。
  • 一份受影响顶级的 Api:
    • HttpClient HttpWebRequest
    • FtpClient
    • SmtpClient
    • SslStream
  • SCH_USE_STRONG_CRYPTO此标志将自动用.NET Framework 4.6 并通过删除不安全的加密和哈希算法来影响行为。对于所有操作系统平台早于 Windows 10RC4算法将从使用。从 Windows 10 将删除下列其他不安全的算法:DES空值导出MD5

警告:本文已自动翻译

属性

文章 ID:3069494 - 上次审阅时间:07/20/2015 15:55:00 - 修订版本: 2.0

Microsoft .NET Framework 4.6

  • kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB3069494 KbMtzh
反馈