【问题标题】:Why ServicePointManager.SecurityProtocol default value is different on different machines?为什么不同机器上的 ServicePointManager.SecurityProtocol 默认值不同?
【发布时间】:2017-01-07 21:21:43
【问题描述】:

目前我有一个问题,无法找到严格的答案。

我有面向 4.6.1 框架的 ASP.NET MVC 5 应用程序,它的目标是使用受 TLS 1.1/TLS 1.2 协议保护的第三方 API。

我尝试在 2 个环境中运行我的应用程序:

  • 我的本地计算机 Windows 10 与 .NET 4.6.2 框架、IIS Express;
  • 服务器机器 Windows Server 2012 与 .NET 4.6.1、IIS 8.0;

问题在于,当我在本地启动它时 ServicePointManager.SecurityProtocol 默认值设置为 Ssl3, Tls,因此我无法针对 API 并且必须在应用程序开始使用 TLS 1.1/TLS 1.2 时对其进行编码:@987654323 @。

应用程序在服务器上运行时默认值ServicePointManager.SecurityProtocol设置为Tls, Tls11, Tls12,所以运行良好。

根据文档,在 .NET Framework 4.6 或以上版本上运行的应用程序默认必须使用 TLS 1.1/TLS 1.2,在远程机器上的情况如何。

为什么ServicePointManager.SecurityProtocol的默认值不一样?是因为.NET Framework 配置吗?或者也许是注册表设置?我已经搜索过了,但找不到答案。

【问题讨论】:

  • default 值为何重要?如果您需要一些特定的设置,无论如何设置它们似乎是最简单的做法。
  • @Damien_The_Unbeliever 这很重要,因为当服务器因为 Ssl3Tls 已过时而撤销使用时,进行调用的应用程序必须具有 Tls11Tls12 ServicePointManager.SecurityProtocol 将较新的协议定义为可以使用的选项。您可以在代码中手动指定它们,但这显然不是一个好主意。为什么默认情况下不使用最安全的版本?恕我直言,这应该在我们不做任何事情的情况下发生......
  • @Damien_The_Unbeliever 这很重要,因为为每个脚本/应用程序硬编码特定协议需要更多资源来维护,需要通过营业额和未来可能不明显的更新来了解(尤其是使用不透明的 Windows SSL/TLS异常消息)。在许多环境中,现实情况是系统之间支持的最低协议版本会定期在组织范围内提高,并且在服务器范围内解决这个问题而不是在每个服务器上逐个脚本或逐个应用程序更容易管理.

标签: c# .net asp.net-mvc ssl iis


【解决方案1】:

MSDN: ServicePointManager.SecurityProtocol Property:

请注意,没有为该属性列出默认值,这是故意的。安全环境不断变化,默认协议和保护级别随着时间的推移而变化,以避免已知的弱点。默认值会因个别机器配置、安装的软件以及应用的补丁而异。

MSDN Blogs: Support for SSL/TLS protocols on Windows:

在 Windows 上,对 SSL/TLS 协议的支持与 SCHANNEL 组件相关联。因此,如果特定操作系统版本不支持 SSL/TLS 版本,这意味着它仍然不受支持。

MSDN: Cipher Suites in TLS/SSL (Schannel SSP)

不同的 Windows 版本支持不同的 TLS 密码套件和优先级顺序。有关 Microsoft Schannel Provider 选择它们的默认顺序,请参阅相应的 Windows 版本。

换句话说:这取决于您的 Windows 版本及其补丁级别。

但是就像@Damien 说的,你为什么要关心默认级别是什么?

【讨论】:

  • 谢谢大家的回答。由于类似环境的差异,我有点困惑。我已经明确设置了值
【解决方案2】:

我们可以像下面这样更新注册表,让 .Net 框架使用 TLS1.1\TLS1.2,需要重启。

我试过了,我机器中ServicePointManager.SecurityProtocol的值从“Ssl3, Tls”变成了“Tls, Tls11, Tls12”:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001 

【讨论】:

猜你喜欢
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多