如何在 SQLCLR 2 中启用 TLS 1.2 支持?

How to enable TLS 1.2 support in SQLCLR 2?

我需要在安装在 SQL Server 2008 R2 上的 SQLCLR 程序集中强制使用 TLS 1.2。 我已阅读 解释如何以编程方式启用 TLS 1.2。

不幸的是,添加 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12; 会导致错误 不支持请求的安全协议,即使 Windows 服务器 (2008 R2) 已启动 -最新(所以提到微软的修补程序包括在内)。

有人在 SQLCLR 汇编中使用相同的方法吗?有没有其他方法可以在这样的程序集中支持 TLS 1.2?

程序集的目标框架设置为:.NET Framework 3.5

您链接到的答案实际上有以下代码,它看起来与我自己尝试并开始工作的代码相似,并且实际上与使用 SecurityProtocolTypeExtensions:

相同

Add this to my code (C#):

public const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12

你试过了吗?另外,如果 SQL Server 在 Windows Server 2008 R2 上是 运行,那么 OS 是什么 SP 级别?通读关于“Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1”的知识库文章(链接在您链接到的答案中),“System.NotSupportedException:不支持请求的安全协议" 错误:

  1. 未安装修补程序(更新 .NET 后您是否重新启动了 OS?)
  2. 你 SQL 服务器是 运行 在 Windows Server 2008,不是 2008 R2

如果这两种情况都不是,那么明确定位 .NET 3.5.1 可能会起作用(尽管我认为没有必要)。虽然您确实提到已经以 3.5.1 为目标,但我怀疑您是在项目的 app.config 文件中这样做的,在这种情况下它不会有任何效果,因为 SQL 服务器不知道该文件。 SQL 服务器使用自己的应用程序配置文件,位于:

"C:\Program Files\Microsoft SQL Server\MSSQLxx.yyyyy\MSSQL\Binn\sqlservr.exe.config"

其中:

  • "xx" = 2 位 SQL 服务器版本:2008 / 2008 R2 = 10、2012 = 11、2014 = 12,依此类推。
  • "yyyy" = 实例名称。默认实例名称是“MSSQLSERVER”。

更改该配置文件后,您至少需要通过 DBCC FREESYSTEMCACHE(N'ALL'); 重新加载用户应用程序域。 应该就够了。但是,要 100% 确定您可以重新启动 SQL 服务器实例。