如何在 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:不支持请求的安全协议" 错误:
- 未安装修补程序(更新 .NET 后您是否重新启动了 OS?)
- 你 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 服务器实例。
我需要在安装在 SQL Server 2008 R2 上的 SQLCLR 程序集中强制使用 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:不支持请求的安全协议" 错误:
- 未安装修补程序(更新 .NET 后您是否重新启动了 OS?)
- 你 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 服务器实例。