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问题。