在实时系统中,我们使用C#中的SqlConnection
对象与各种MSSQL服务器建立多个连接。
由于客户正在将其SQL服务器更新为TLS 1.2,我想知道是否有办法确定在活动连接上使用哪种TLS实现。
如果可能的话,我想在C#中完全实现这一点,但只要最终结果是自包含的应用程序,就可以使用其他语言。
这样做的目的是为客户提供一个快速测试工具,该工具将有助于确保软件在集成环境中使用TLS 1.2正常工作,然后才能对实时系统进行更改。
我花了几个小时研究这个问题,但到目前为止我找不到任何有用的东西。我发现的所有资源都是针对ASP开发人员的,并没有详细介绍如何直接连接到桌面应用程序中的SQL服务器。
应用程序使用的是.NET 4.5,因此应该可以使用TLS 1.2。
非常感谢
答案 0 :(得分:1)
为了让任何在这个问题上遇到问题寻找同一问题解决方案的人的利益,Ed Harper发布的评论是正确的 - I don't think there's a way to determine the TLS version in use by a connection from within SQL Server. You might have to resort to packet capture to determine the TLS version
。
使用.NET 4.5及更高版本时,支持TLS 1.2,如果与明确指定TLS 1.2的服务建立连接,则连接应正常工作。
由于TLS适用于传输OSI层,因此数据包捕获是确认TLS版本的正确方法,如Ed Harper发布的链接中所述 - https://networkengineering.stackexchange.com/questions/20227/find-ssl-version-in-tcp-packets-in-established-tcp-connection
由于我们的代码是为.NET 4.5编写的,因此切换到强制执行TLS 1.2不需要任何代码更改。
答案 1 :(得分:1)
您可以获取具有扩展事件的现有连接的TLS版本
答案 2 :(得分:0)
您可以让您的C#应用程序通过以下查询提取产品版本:
list[:]
然后,将此版本与Microsoft针对每个产品级别/版本的最低版本进行比较(您必须自定义方法以检查构建版本是否至少与每个级别一样高)。
SQL Server版本 - 支持TLS 1.2的第一个版本
SELECT SERVERPROPERTY('ProductVersion'), SERVERPROPERTY('ProductLevel')
来源:https://support.microsoft.com/en-us/help/3135244/tls-1.2-support-for-microsoft-sql-server