首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET 4.5和.NET 4.5.1是否默认启用TLS1.1和TLS1.2?

.NET 4.5和.NET 4.5.1是否默认启用TLS1.1和TLS1.2?
EN

Stack Overflow用户
提问于 2016-01-21 17:56:15
回答 2查看 72.1K关注 0票数 39

在我们的Windows2012Server R2上,我们需要禁用TLS1.0。

但是,我们有.NET 4.5wcf服务在运行。我们发现,如果我们禁用TLS 1.0,WCF服务将不再运行,因为我们收到错误消息“远程主机已强制关闭现有连接”。

在.NET 4.5和.NET 4.5.1中是否默认启用TLS1.1/1.2?如果不是,我们假设情况就是这样,在我们的WCF项目中,我们在哪里强制项目使用TLS 1.1/1.2?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-15 20:30:51

在.NET 4.5和.NET 4.5.1中是否默认启用TLS1.1/1.2?

不是的。为各种框架版本启用的默认协议包括:

  • .NET框架4.5和4.5.1: SSLv3和TLSv1
  • .NET框架4.5.2: SSLv3、TLSv1和TLSv1.1
  • .NET框架4.6及更高版本: TLSv1、TLSv1.1和TLS1.2

来源:[1] [2] [3]

虽然微软recommends against explicitly specifying protocol versions支持使用操作系统的默认设置:

为了确保.NET框架应用程序的安全性,TLS版本应该是硬编码的而不是。TLS应用程序应使用操作系统(OS)支持的.NET版本。

..。仍然可以通过使用ServicePointManager类来选择您的应用程序支持的协议,特别是通过将SecurityProtocol属性设置为相关的SecurityProtocolType

在您的示例中,您需要使用以下内容:

代码语言:javascript
运行
复制
System.Net.ServicePointManager.SecurityProtocol =
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

请注意,从2020年起,TLSv1和TLSv1.1实际上已被弃用;您应该避免构建依赖于这些协议的新应用程序,并尽一切努力升级当前使用它们的应用程序。

票数 108
EN

Stack Overflow用户

发布于 2020-10-10 02:05:34

Ian Kemp的答案没有问题,但我只是想提供另一个答案,这意味着您不必重新编译代码。

任何高于TLS4.5的版本都可以支持TLS1.2,但是任何低于.NET 4.7的版本的默认值都是TLS1.1。因此,如果您需要使用TLS 1.2访问某些内容,您会得到一个错误,因为它将尝试使用默认设置。

您可以将以下代码添加到配置文件中,以重写默认设置。

代码语言:javascript
运行
复制
<runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/>
</runtime>

更新

对于.NET Framework4.7及更高版本,默认为操作系统选择最佳安全协议和版本。

对于.NET框架4.6到4.6.2,AppContext开关可以放在app.config或webconfig中,因为系统默认设置为较低的TLS或SSL版本。

代码语言:javascript
运行
复制
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/>
</runtime>

对于.NET Framework4.5到4.5.2,需要设置注册表项SchUseStrongCrypto和SystemDefaultTlsVersions。

代码语言:javascript
运行
复制
HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto

SchUseStrongCrypto注册表项的值为DWORD型。值为1会导致您的应用程序使用强加密,值为0将禁用强加密。强加密使用更安全的网络协议(TLS 1.2、TLS 1.1和TLS 1.0),并阻止不安全的协议。对于.NET框架4.5.2或更早版本,该键默认为0。在这种情况下,您应该显式地将其值设置为1。

代码语言:javascript
运行
复制
HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions

SystemDefaultTlsVersions注册表项的值为DWORD型。值为1会使您的应用程序允许操作系统选择协议。值为0会导致您的应用程序使用.NET框架选择的协议。

如果应用程序以.NET框架4.6.1或更早版本为目标,则键默认为0。在这种情况下,您应该显式地将其值设置为1。

例如,对于在32位操作系统上运行的32位应用程序和在64位操作系统上运行的64位应用程序,请更新以下子项值:

代码语言:javascript
运行
复制
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001

对于在64位操作系统上运行的32位应用程序,请更新以下子键值:

代码语言:javascript
运行
复制
    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34920429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档