.NET 4.5和.NET 4.5.1默认启用TLS 1.1和TLS 1.2

nei*_*ldt 13 .net c# ssl wcf tls1.2

在我们的Windows 2012 Server R2上,我们需要禁用TLS 1.0.

但是我们运行.NET 4.5 Wcf服务.我们发现,如果我们禁用TLS 1.0,WCF服务不再运行,因为我们收到错误"现有连接被远程主机强行关闭".

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

Ian*_*emp 59

不可以.为各种框架版本启用的默认协议是:

  • .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

资料来源:[1] [2]

您可以通过使用ServicePointManager该类来指定应用程序支持的协议,特别是通过设置SecurityProtocol属性,在您的情况下,您可以将其设置为以下内容:

System.Net.ServicePointManager.SecurityProtocol =
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你 - 这已经被选为答案了.一行代码,你节省了我几个小时的调试或注册表黑客攻击.谢谢. (4认同)
  • 刚刚发布:[使用.NET的TLS最佳实践](https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls) (4认同)
  • 这绝对是正确的。但是,也可以通过安装.NET 4.6或更高版本并启用[.NET强加密注册表项]来启用TLS 1.2,而无需更改代码。(https://docs.microsoft.com/zh-CN/officeonlineserver/enable-tls -1-1和tls-1-2-support-office-on-office-online-server#enable-strong-cryptography-in-netframework-45或更高版本)。更多信息在这里:https://github.com/TheLevelUp/pos-tls-patcher (2认同)

Ric*_*Web 6

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

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

您可以将以下代码添加到配置文件中,以覆盖默认值。

<runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)

  • 我相信这个答案被低估了。 (2认同)