Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据已建立的SqlConnection确定TLS版本_C#_Sql Server_Tls1.2 - Fatal编程技术网

C# 根据已建立的SqlConnection确定TLS版本

C# 根据已建立的SqlConnection确定TLS版本,c#,sql-server,tls1.2,C#,Sql Server,Tls1.2,在实时系统中,我们使用C#中的SqlConnection对象与各种MSSQL服务器建立多个连接 由于客户机正在将其SQL Server更新为TLS 1.2,我想知道是否有办法确定活动连接上正在使用哪个TLS实现 如果可能的话,我想完全用C实现这一点,但只要最终结果是一个自包含的应用程序,就可以使用其他语言 这样做的目的是为客户提供一个快速测试工具,在对实时系统进行更改之前,该工具将有助于确保软件在集成环境中与TLS 1.2正常工作 我已经花了几个小时研究这个问题,但到目前为止还没有找到任何有用的

在实时系统中,我们使用C#中的
SqlConnection
对象与各种MSSQL服务器建立多个连接

由于客户机正在将其SQL Server更新为TLS 1.2,我想知道是否有办法确定活动连接上正在使用哪个TLS实现

如果可能的话,我想完全用C实现这一点,但只要最终结果是一个自包含的应用程序,就可以使用其他语言

这样做的目的是为客户提供一个快速测试工具,在对实时系统进行更改之前,该工具将有助于确保软件在集成环境中与TLS 1.2正常工作

我已经花了几个小时研究这个问题,但到目前为止还没有找到任何有用的东西。我找到的所有资源都是针对ASP开发人员的,没有详细介绍如何在桌面应用程序中直接连接到SQL server

应用程序正在使用.NET4.5,因此TLS1.2应该是可用的

非常感谢

您可以让您的C#应用程序通过以下查询获取产品版本:

SELECT SERVERPROPERTY('ProductVersion'), SERVERPROPERTY('ProductLevel')
然后,将此版本与Microsoft针对每个产品级别/版本提供的最低版本进行比较(您必须自定义方法,以检查每个级别的生成版本是否至少与最低版本相同)

SQL Server发行版-第一个支持TLS 1.2的版本

SQL Server 2014 SP1 - 12.0.4439.1
SQL Server 2014 SP1 GDR - 12.0.4219.0
SQL Server 2014 RTM - 12.0.2564.0
SQL Server 2014 RTM GDR - 12.0.2271.0
SQL Server 2012 SP3 GDR - 11.0.6216.27
SQL Server 2012 SP3 - 11.0.6518.0
SQL Server 2012 SP2 GDR - 11.0.5352.0
SQL Server 2012 SP2 - 11.0.5644.2
SQL Server 2008 R2 SP3 - 10.50.6542.0
SQL Server 2008 R2 SP2 GDR (IA-64 only) - 10.50.4047.0
SQL Server 2008 R2 SP2 (IA-64 only) - 10.50.4344.0
SQL Server 2008 SP4 - 10.0.6547.0
SQL Server 2008 SP3 GDR (IA-64 only) - 10.0.5545.0
SQL Server 2008 SP3 (IA-64 only) - 10.0.5896.0

来源:

为了方便那些无意中遇到这个问题并寻求解决同一问题的方法的人,Ed Harper发表的评论是正确的-
我认为没有办法从SQL Server中确定连接正在使用的TLS版本。您可能需要借助数据包捕获来确定TLS版本

使用.NET 4.5及更高版本时,支持TLS 1.2,如果建立了与明确指定TLS 1.2的服务的连接,则该连接应能正常工作

由于TLS适用于传输OSI层,数据包捕获是确认TLS版本的正确方法,如Ed Harper发布的链接中所述-


由于我们的代码是为.NET 4.5编写的,因此切换到强制TLS 1.2不需要任何代码更改。

您可以获得现有扩展事件连接的TLS版本


我认为没有办法从SQL Server中确定连接正在使用的TLS版本。你可能不得不求助于数据包捕获,这正是我所担心的。如果安全性是在传输层协商的,那么连接对象不太可能看到正在使用的安全协议,它要么有效,要么无效。@EdHarper-谢谢你的帮助,你确实是对的。我已经简要地发布了一个关于这一效果的答案,但如果你可以自己在答案中总结,我会接受它作为正确的解决方案。谢谢。我想你应该接受你自己的答案——毕竟你已经做了证明我的猜测的工作。@EdHarper-是的,但是,如果你相信它的到期,你确实支持我认为会是这样的情况,这样我就节省了很多小时的测试!我已经接受了我自己的答案,但如果你真的想发布一个具有相同效果的答案,我会接受它作为解决方案。感谢您的帮助。我确实想知道是否有办法通过拉取产品版本来完成此操作,但是这只会真正告诉我SQL server是否支持TLS 1.2,而不是它是否用于连接。我们知道服务器将支持TLS 1.2,因为它们是专门为此进行修补的。现在可以从SQL Server获取TLS版本。见该条末尾的说明;这只能在SQL 2016及更高版本上使用扩展事件。对于以前的版本(2012年和2014年),这些补丁可能已经添加了底层钩子,但是您必须使用一个更加困难和模糊的工具(“数据访问跟踪”)来捕获它们。