C# 默认情况下,.NET 4.5和.NET 4.5.1是否启用了TLS 1.1和TLS 1.2?

C# 默认情况下,.NET 4.5和.NET 4.5.1是否启用了TLS 1.1和TLS 1.2?,c#,.net,wcf,ssl,tls1.2,C#,.net,Wcf,Ssl,Tls1.2,在Windows 2012服务器R2上,我们需要禁用TLS 1.0 但是,我们有.NET4.5WCF服务正在运行。我们发现,如果禁用TLS 1.0,WCF服务将不再运行,因为我们收到错误“远程主机强制关闭了现有连接” 在.NET 4.5和.NET 4.5.1中,TLS 1.1/1.2是否默认启用?如果不是,我们假设是这样,在我们的WCF项目中,我们在哪里强制项目使用TLS 1.1/1.2 在.NET 4.5和.NET 4.5.1中,TLS 1.1/1.2是否默认启用 否。为各种框架版本启用的默认

在Windows 2012服务器R2上,我们需要禁用TLS 1.0

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

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

在.NET 4.5和.NET 4.5.1中,TLS 1.1/1.2是否默认启用

否。为各种框架版本启用的默认协议为:

  • .NET Framework 4.5和4.5.1:SSLv3和TLSv1
  • .NET Framework 4.5.2:SSLv3、TLSv1和TLSv1.1
  • .NET Framework 4.6及更高版本:TLSv1、TLSv1.1和TLS1.2
资料来源:[]]

虽然Microsoft支持使用操作系统的默认设置:

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

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

在您的情况下,您需要使用以下各项:

System.Net.ServicePointManager.SecurityProtocol=
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

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

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

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

<runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/>
</runtime>
您可以将以下代码添加到配置文件中,以覆盖默认值

<runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/>
</runtime>


通常不是,默认协议是SSL 3。看到这个副本了吗?非常感谢你-这是疯狂的,它没有被选为答案。只要一行代码,你就为我节省了数小时的调试或注册表黑客攻击。谢谢,这绝对正确。但是,通过安装.NET 4.6或更高版本并启用,也可以在不更改代码的情况下启用TLS 1.2。这里的更多信息:刚刚发布:这会出现在propertygroup部分的.csproj中吗?不会,这会出现在已编译应用程序的app.config中。我相信这个答案被低估了。