我们的客户最近从TLS 1.0升级到TLS 1.2,之后我们的软件无法与SQL服务器连接。它使用OLE DB提供程序连接到SQL Server。以下是从SQL服务器返回的错误 -
[DBNETLIB] [ConnectionOpen SECDoClientHandshake()] SSL安全错误SQL状态:08001 SQL错误号码:18
找不到与Microsoft OLE DB Provider for SQL Server是否支持TLS 1.2相关的任何有用信息。
我发现的其中一个链接似乎表明它不受支持。 https://forums.iis.net/t/1233674.aspx?connecing+SQL+server+DB+issue+after+installingTLS1+2+in+SQL+srver+with+classic+asp+application+
因此,想要检查stackoverflow,以防任何人有任何关于此的信息。
SQL附带的SQLOLEDB提供程序和SQL Server ODBC驱动程序是仅为向后兼容性而提供的旧组件。自SQL 2005以来,这些已被弃用。
据this blog post by the MSSQL Tiger Team说:
SQLOLEDB不会获得对TLS 1.2的支持。您需要将驱动程序切换到https://support.microsoft.com/en-us/kb/3135244中列出的受支持的驱动程序之一
您应该能够安装SQL Server Native Client 2012并使用该OLE DB提供程序只更改连接字符串(将Provider=SQLOLEDB
更改为Provider=SQLNCLI11
)。当然,一旦应该测试,以避免意外。例如,我记得有人在使用服务器API游标时遇到与SQL Server Native Client提供程序和ADO classic的行为差异,尽管常用的firehose游标很好。
编辑
新的OLE DB驱动程序MSOLEDBSQL已经发布。此新驱动程序包括对最新TLS 1.2标准的支持,并向后兼容SQL Server Native Client 11(SQLNCLI11)。见the Microsoft SQLNCLi team blog announcement。
这对您来说可能不是一个解决方案,因为它是您的客户可能无法等待的未来修复,但显然Microsoft正在取消对OLEDB驱动程序的补充,新版本支持2018年第一季度的TLS 1.2:https://blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/announcing-the-new-release-of-ole-db-driver-for-sql-server/
用于SQL Server的新Microsoft OLE DB驱动程序或msoledbsql也将在即将发布的第一个版本中引入多子网故障转移功能,并与最新的TLS 1.2标准保持同步。
此外,第一个即将发布的版本将是一个与SQL Server生命周期带外的独立安装包。这也意味着驱动程序不会打包在SNAC库中,也不会与任何其他驱动程序结合使用。
我的最终修改后修复了Azure云上TLS1.2升级后的问题 -
Provider=SQLOLEDB
改为Provider=SQLNCLI11