【问题标题】:Issue to use TLS 1.2 in .NET Framework 4.0在 .NET Framework 4.0 中使用 TLS 1.2 的问题
【发布时间】:2017-05-19 14:39:48
【问题描述】:

我禁用了 TLS 1.0。因此,我们尝试在使用 .Net Framework 4.0 的 .Net 应用程序中使用 TLS 1.2。

我已经在开头添加了代码

System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

它在我的本地系统上完美运行。

但我不确定为什么在服务器(Windows Server 2008 R2)上部署代码时它不起作用。我检查了一切。 .Net 框架存在于服务器上。但它仍然只在服务器上给出同样的问题。

这里有什么我遗漏的吗?

【问题讨论】:

标签: asp.net-mvc .net-4.0 windows-server-2008-r2 tls1.2 aaa-security-protocol


【解决方案1】:

根据this post

.NET 4.0 最高支持TLS 1.0.NET 4.5 最高支持TLS 1.2

但是,以.NET 4.0 为目标的应用程序仍然可以支持最高 TLS 1.2如果 .NET 4.5 安装在同一环境中.NET 4.5 安装在 .NET 4.0 之上,替换 System.dll

所以基本上你需要将你的服务器升级到.Net 4.5 以启用TLS 1.2

此外,您还可以简化代码并使其更具可读性:

using System.Net;

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

相关 MSDN 文章:

【讨论】:

  • 这是否意味着,如果我有一个 WinForms 应用程序并且需要 TLS 1.2 支持 SOAP 请求,我必须将其更改为 .NET 4.5 并确保所有用户都安装了该框架?
  • 是的,否则它将无法正常工作。如果你能做到这一点:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls,这可能会奏效,但仍然可能会崩溃,因为你说你有 TLS 1.0 被禁用。
  • SecurityProtocolType.Tls12 甚至在 .NET 4.0 中都不存在,但我可以使用 int。然而,用户需要安装 .NET 4.5 似乎无法避免。
  • 是的,正如参考答案中所说,您将获得NotSupportedExceptionTls12 值设置SecurityProtocol
  • 如果您想要 TLS 1.2 而无需更改代码,您真的想要 .NET 4.6 或更高版本。确实,.NET 4.5 支持 TLS 1.2,但直到 .NET 4.6 才默认启用作为通信协议。更多信息在这里:github.com/TheLevelUp/pos-tls-patcher
【解决方案2】:

如果您想在现有 .NET 4.x 代码中使用 TLS 1.2 而无需更改应用程序代码,则需要以下内容:

  1. 安装 .NET 框架 4.6 或更高版本。这是默认情况下使用 TLS 1.2 作为协议并结合适当的 Windows 注册表项所必需的。

  2. 设置如下.NET Framework strong cryptography registry keys:

在 32 位和 64 位版本的 Windows 上: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001

在 64 位版本的 Windows 上: [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001

WOW6432Node 值由 32 位应用程序在 64 位系统上运行时使用。

欲了解更多信息,请参阅:https://github.com/TheLevelUp/pos-tls-patcher

更新: 在应用程序代码中硬编码安全协议确实不是一个好主意。您希望操作系统为您执行此操作。如需进一步阅读,请参阅Transport Layer Security (TLS) best practices with the .NET Framework

【讨论】:

  • @VijayKumbhoje 是的,如果您希望 IIS 使用 TLS 1.2。但是,您可能希望考虑升级到 Windows 10 和最新版本的 IIS 和 .NET Framework。
  • 我相信这些注册表设置仍然是必需的。至少在微软将它们更改为我认为最终会发生的默认行为之前。
  • @VijayKumbhoje,这也可能对您有所帮助:nartac.com/Products/IISCrypto
猜你喜欢
  • 2016-10-07
  • 2017-05-26
  • 2018-07-24
  • 2018-12-26
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多