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

Issue to use TLS 1.2 in .NET Framework 4.0

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

我已经在开头添加了代码

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

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

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

这里有什么我遗漏的吗?

根据

.NET 4.0 supports up to TLS 1.0 while .NET 4.5 supports up to TLS 1.2

However, an application targeting .NET 4.0 can still support up to TLS 1.2 if .NET 4.5 is installed in the same environment. .NET 4.5 installs on top of .NET 4.0, replacing System.dll.

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

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

using System.Net;

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

相关 MSDN 文章:

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

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

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

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

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

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

有关详细信息,请参阅:https://github.com/TheLevelUp/pos-tls-patcher

更新: 在应用程序代码中硬编码安全协议确实不是一个好主意。你想要 OS 为你做这件事。请参阅 Transport Layer Security (TLS) best practices with the .NET Framework 以进一步阅读。