在 .NET Framework 4.0 中使用 TLS 1.2 的问题

Posted

技术标签:

【中文标题】在 .NET Framework 4.0 中使用 TLS 1.2 的问题【英文标题】:Issue to use TLS 1.2 in .NET Framework 4.0 【发布时间】: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 框架存在于服务器上。但它仍然只在服务器上给出同样的问题。

这里有什么我遗漏的吗?

【问题讨论】:

Default SecurityProtocol in .NET 4.5的可能重复 【参考方案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 文章:

SecurityProtocolType enum for .Net 4.0(这里没有 Tls12 成员) SecurityProtocolType enum for current .Net

【讨论】:

这是否意味着,如果我有一个 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 而无需更改应用程序代码,则需要以下内容:

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

    设置如下.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

以上是关于在 .NET Framework 4.0 中使用 TLS 1.2 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 .Net 3.5 应用程序中使用 Entity Framework 4.0 [重复]

.net5.0如何切换成4.0 framework

net framework 4.0安装不了 拒绝访问

net framework 4.0 能运行在啥系统上

Win10系统无法安装.net framework 4.0怎么办

在 .NET Framework 4.0 的 AppDomain 中运行 codeCom 代码