Sql server SQL Server和TLS 1.2,来自.NET Core和ODBC

Sql server SQL Server和TLS 1.2,来自.NET Core和ODBC,sql-server,odbc,tls1.2,asp.net-core-2.2,tls1.0,Sql Server,Odbc,Tls1.2,Asp.net Core 2.2,Tls1.0,我知道这已经出现了一百万次,但显然不是使用System.Data.Odbc的.NET内核 在注册表中关闭TLS 1.0后,我得到一个错误: {System.Data.Odbc.OdbcException(0x80131937):错误[08001][Microsoft][Odbc SQL Server驱动程序][DBNETLIB]SSL安全错误 错误[01000][Microsoft][ODBC SQL Server驱动程序][DBNETLIB]连接打开(SECDoClientHandshake(

我知道这已经出现了一百万次,但显然不是使用
System.Data.Odbc
的.NET内核

在注册表中关闭TLS 1.0后,我得到一个错误:

{System.Data.Odbc.OdbcException(0x80131937):错误[08001][Microsoft][Odbc SQL Server驱动程序][DBNETLIB]SSL安全错误

错误[01000][Microsoft][ODBC SQL Server驱动程序][DBNETLIB]连接打开(SECDoClientHandshake())。

我在承载SQL server的服务器上运行ASP.NET核心站点时,也在Windows 10客户端上使用开发人员计算机,连接到远程SQL server时,会出现此错误

SSMS在服务器和客户端上都可以正常运行和连接。当我打开TLS 1.0支持并重新启动SQL server时,站点在服务器和客户端上都可以正常运行。(无需重新启动即可看到差异)

当然,我已经启用了FIPS支持,尽管我在某个地方读到不再需要它

以下是配置:

  • Windows Server 2016(最新)
  • SQL Server 2016 SP2及其最新更新
  • 当然,我也安装了.NET4.7,尽管我没有使用它
[HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]“已启用”=dword:00000000

[HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]“DisabledByDefault”=dword:00000001

我怀疑.NET标准2.0的
System.Data.Odbc
不支持1.2。 我很想得到一些帮助和指点

[编辑] @TALLED这是已安装的,它应支持TLS 1.2:

  • 版本为
    11.4.7001.0的Microsoft SQL Server 2012本机客户端
  • 用于SQL Server的Microsoft ODBC驱动程序17,版本为
    17.3.1.1
  • 用于SQL Server的Microsoft ODBC驱动程序11,版本为
    12.2.5543.11
  • 用于SQL Server的Microsoft ODBC驱动程序13,版本为
    14.0.1000.169

    • System.Data.Odbc
      不是问题;
      [Microsoft][Odbc-SQL-Server-Driver][DBNETLIB]
      是问题


      解决方案是获取(或确认您正在使用)SQL Server最新的ODBC驱动程序,或者…

      或者更好,使用SqlClient而不是托管代码中的ODBC。@Talled是否有比版本17更新的驱动程序?为什么要使用.NET中的ODBC?使用SqlClient托管提供程序和TLS 1.2支持也会获得更好的性能。@Dan Guzman:可能,但这可能会导致错误由于ODBC中的SQL与SQLclient的SQL不兼容,所以代码转换非常大。ODBC驱动程序的更改是短期的修复,但我建议您考虑长期使用托管托管程序。@ DanGuzman,我做了一个有限的测试,确实SQLServer确实在工作。您有性能差异或指针的指针吗?解释了SQLClient的适用性?顺便说一下,我有最新的ODBC驱动程序(我想)因此,我不知道短期解决方案。通过避免互操作开销,在使用大型结果集时,.NET中托管和非托管提供程序之间的性能差异将最为明显。YMMV但我观察到ODBC在客户端处理方面大约慢50%。在OLTP工作负载下可能不明显。使用SqlClient,您将可以在没有单独安装的驱动程序的情况下使用.NET,这样可以避免您当前遇到的TLS问题。