在 .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 似乎无法避免。
是的,正如参考答案中所说,您将获得NotSupportedException
的Tls12
值设置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 [重复]