针对 Microsoft SQL Server 的 TLS 1.2 支持

适用范围:SQL Server
原始 KB 数: 3135244

简介

本文提供有关在 Windows、SQL Server 2016、SQL Server 2014、SQL Server 2012、SQL Server 2012、SQL Server 2008 和 SQL Server 2008 R2 上启用对 SQL Server 2017 支持Microsoft版本的更新的信息。 本文还列出了支持的客户端提供程序。 SQL Server 2016、SQL Server 2017 和 SQL Server 2019 支持 TLS 1.2,而无需更新。

针对安全套接字层(SSL)和早期版本的传输层安全性(TLS)报告了几个已知漏洞。 建议升级到 TLS 1.2,以实现安全通信。

重要

Microsoft TDS 实现未报告已知漏洞。 这是 SQL Server 客户端和 SQL Server 数据库引擎之间使用的通信协议。 从本文发布日期开始,TLS 1.0 的 Microsoft Schannel 实现(有关已报告到本文发布日期Microsoft的已知漏洞)的 Schannel 实现汇总在 Windows 安全状态更新中 TLS 1.0 的 Schannel 实现:2015 年 11 月 24 日。

如何了解是否需要此更新

使用下表确定当前版本的 SQL Server 是否已支持 TLS 1.2,还是必须下载更新才能启用 TLS 1.2 支持。 使用表中的下载链接获取适用于环境的服务器更新。

注意

此表中列出的版本还支持 TLS 1.2。

SQL Server 版本 支持 TLS 1.2 的初始版本/版本 TLS 1.2 支持的当前更新 其他信息
SQL Server 2014 SP1 CU 12.0.4439.1

SP1 CU5
KB3130926 - SQL Server 2014 SP1 累积更新 5

注意KB3130926 现在将安装为 2014 SP1(CU13 - KB4019099)生成的最后一个 CU,其中包括 TLS 1.2 支持以及迄今为止发布的所有修补程序。 如果需要,CU5 可在Windows 更新目录中使用。

注意:TLS 1.2 支持在 2014 SP22014 SP3 中也可用。
KB3052404 - 修复:无法使用传输层安全协议版本 1.2 连接到运行 SQL Server 2014 或 SQL Server 2012 的服务器
SQL Server 2014 SP1 GDR 12.0.4219.0

SP1 GDR TLS 1.2 更新
最新的累积 GDR 更新 KB4019091中提供了对 2014 SP1 GDR 的 TLS 1.2 支持。

注意:TLS 1.2 支持在 2014 SP22014 SP3 中也可用。
SQL Server 2014 RTM CU 12.0.2564.0

RTM CU12
KB3130923 - SQL Server 2014 累积更新 12

注意:KB3130923现在将安装为 2014 RTM(CU14 - KB3158271 )发布的最后一个 CU,其中包括 TLS 1.2 支持以及迄今为止发布的所有修补程序。 如果需要,CU12 可在Windows 更新目录中使用。

注意:TLS 1.2 支持在 2014 SP22014 SP3 中也可用。
KB3052404 - 修复:无法使用传输层安全协议版本 1.2 连接到运行 SQL Server 2014 或 SQL Server 2012 的服务器
SQL Server 2014 RTM GDR 12.0.2271.0

RTM GDR TLS 1.2 更新
目前,只有安装 2014 SP22014 SP3 才支持 SQL 2014 RTM。
SQL Server 2012 SP3 GDR 11.0.6216.27

SP3 GDR TLS 1.2 更新
SQL Server 2012 SP3 GDR 安全更新说明:2018 年 1 月 16 日

注意:TLS 1.2 支持也在 2012 SP4提供。
SQL Server 2012 SP3 CU 11.0.6518.0

SP1 CU3
KB3123299 - SQL Server 2012 SP3 累积更新 1

注意:KB3123299现在将安装为 2012 SP3 发布的最后一个 CU(CU10 - KB4025925,其中包括 TLS 1.2 支持以及迄今为止发布的所有修补程序)。 如果需要,CU1 可在Windows 更新目录中使用。

注意:TLS 1.2 支持也在 2012 SP4提供。
KB3052404 - 修复:无法使用传输层安全协议版本 1.2 连接到运行 SQL Server 2014 或 SQL Server 2012 的服务器
SQL Server 2012 SP2 GDR 11.0.5352.0

SP2 GDR TLS 1.2 更新
最新的累积 GDR 更新中提供了对 2012 SP2 GDR 的 TLS 1.2 支持 - KB3194719

TLS 1.2 支持也在 2012 SP32012 SP4 中提供。
SQL Server 2012 SP2 CU 11.0.5644.2

SP2 CU10
KB3120313 - SQL Server 2012 SP2 累积更新 10。

注意:KB3120313现在将安装为 2012 SP2 发布的最后一个 CU(CU16 - KB3205054,其中包括 TLS 1.2 支持以及迄今为止发布的所有修补程序)。 如果需要,CU1 可在Windows 更新目录中使用。 注意:TLS 1.2 支持在 2012 SP32012 SP4 中也可用。
KB3052404 - 修复:无法使用传输层安全协议版本 1.2 连接到运行 SQL Server 2014 或 SQL Server 2012 的服务器
SQL Server 2008 R2 SP3 (仅限 x86/x64) 10.50.6542.0

SP2 TLS 1.2 更新
SQL Server 2008 R2 SP3 的最新累积更新中提供了 TLS 1.2 支持 - KB4057113
SQL Server 2008 R2 SP2 GDR (仅限 IA-64) 10.50.4047.0

SP2 TLS 1.2 更新
SQL Server 2008 R2 SP2 GDR (IA-64) TLS 1.2 更新
SQL Server 2008 R2 SP2 CU (仅限 IA-64) 10.50.4344.0

SP2 TLS 1.2 更新
SQL Server 2008 R2 SP2 GDR (IA-64) TLS 1.2 更新
SQL Server 2008 SP4 (仅限 x86/x64) 10.0.6547.0

SP4 TLS 1.2 更新
SQL Server 2008 SP4 的最新累积更新中提供了 TLS 1.2 支持 - KB4057114(仅 x86/x64)。
SQL Server 2008 SP3 GDR (仅限 IA-64) 10.0.5545.0

SP3 TLS 1.2 更新
SQL Server 2008 SP3 GDR (IA-64) TLS 1.2 更新
SQL Server 2008 SP3 CU (仅限 IA-64) 10.0.5896.0

SP3 TLS 1.2 更新
SQL Server 2008 SP3 CU (IA-64) TLS 1.2 更新

客户端组件下载

使用下表下载适用于环境的客户端组件和驱动程序更新。

客户端组件/驱动程序 TLS 1.2 支持的更新
SQL Server 2008/2008 R2 的 SQL Server Native Client 10.0 (x86/x64/IA64) Microsoft SQL Server 2008 和 SQL Server 2008 R2 Native Client
SQL Server 2012/2014 的 SQL Server Native Client 11.0 (x86/x64) Microsoft SQL Server 2012 Native Client - QFE
MDAC 客户端组件(Sqlsrv32.dll和Sqloledb.dll) Windows 10 版本 1809 的服务堆栈更新:2020 年 11 月 10 日

TLS 1.2 客户端驱动程序支持的摘要表

下表汇总了对 SQL Server 驱动程序和提供程序的支持:

驱动程序 TLS 1.2 支持 注意
Microsoft ODBC Driver for SQL Server 11 是,带有更新 安装 SQL Server 2012 或 SQL Server 2014 的最新累积更新。 (请参阅 如何了解是否需要此更新 部分。
Microsoft ODBC Driver for SQL Server 13 本机支持 TLS 1.2。
Microsoft ODBC Driver for SQL Server 17 本机支持 TLS 1.2。
Microsoft ODBC Driver for SQL Server 18 本机支持 TLS 1.2。
Microsoft OLE DB Driver for SQL Server 19 (MSOLEDBSQL) 本机支持 TLS 1.2。
SQL Server Native Client 10 是,带有更新 安装 SQL Server 2008 或 SQL Server 2008 R2 的最新累积更新。 (请参阅 如何了解是否需要此更新 部分。
SQL Server Native Client 11 是,带有更新 安装 SQL Server 2012 或 SQL Server 2014 的最新累积更新。 (请参阅 如何了解是否需要此更新 部分。
SQL Server ODBC 驱动程序 (SQLSRV32.DLL) 是,对于某些 OS 在 Windows Server 2019 和 Windows 10 中添加了支持。 早期操作系统版本不支持它。
SQL Server OLE DB 提供程序 (SQLOLEDB) 是,对于某些 OS 在 Windows Server 2019 和 Windows 10 中添加了支持。 早期操作系统版本不支持它。

SQL Server 使用 TLS 1.2 所需的其他修补程序

必须安装以下 .NET 修补程序汇总,才能启用 SQL Server 功能,例如数据库邮件,以及某些使用需要 TLS 1.2 支持的 .NET 终结点的 SSIS 组件,例如 Web 服务任务才能使用 TLS 1.2。

操作系统 .NET Framework 版本 TLS 1.2 支持的更新
Windows 7 Service Pack 1、Windows 2008 R2 Service Pack 1 3.5.1 .NET Framework 版本 3.5.1 中包含的 TLS v1.2 支持
Windows 8 RTM、Windows 2012 RTM 3.5 .NET Framework 版本 3.5 中包含的对 TLS v1.2 的支持
Windows 8.1、Windows 2012 R2 SP1 3.5 SP1 支持 Windows 8.1 和 Windows Server 2012 R2 上的 .NET Framework 版本 3.5 SP1 中包含的 TLS v1.2

常见问题解答

  • SQL Server 2016 及更高版本是否支持 TLS 1.1?

    是的。 Windows 上的 SQL Server 2016、SQL Server 2017 和 Windows 版上的 SQL Server 2019 附带 TLS 1.0 到 TLS 1.2 支持。 如果要仅对客户端服务器通信使用 TLS 1.2,则必须禁用 TLS 1.0 和 1.1。

  • SQL Server 2019 是否允许使用 TLS 1.0 或 1.1 的连接,还是仅允许 1.2 建立连接?

    SQL Server 2019 的支持级别与 SQL Server 2016 和 SQL Server 2017 相同,SQL Server 2019 支持旧版 TLS。 SQL Server 2019 RTM 附带 TLS 1.2 支持,无需其他更新或修复才能启用 TLS 1.2 支持。

  • TDS 是否受已知漏洞影响?

    Microsoft TDS 实现未报告已知漏洞。 由于多个标准强制组织要求对加密信道使用 TLS 1.2,因此Microsoft正在发布对 TLS 1.2 的支持,以支持广泛的 SQL Server 安装基础。

  • TLS 1.2 更新将如何分发给客户?

    本文提供支持 TLS 1.2 的相应服务器和客户端更新的下载链接。

  • TLS 1.2 是否支持 SQL Server 2005?

    TLS 1.2 支持仅适用于 SQL Server 2008 及更高版本。

  • 如果服务器上禁用 SSL 3.0 和 TLS 1.0,则不使用 SSL/TLS 的客户是否受到影响?

    是的。 即使未使用安全信道,SQL Server 也会在登录期间加密用户名和密码。 对于不使用安全通信且在服务器上禁用 TLS 1.2 以外的所有其他协议的所有 SQL Server 实例,都需要此更新。

  • 哪个版本的 Windows Server 支持 TLS 1.2?

    Windows Server 2008 R2 及更高版本支持 TLS 1.2。

  • 为 SQL Server 通信启用 TLS 1.2 的正确注册表设置是什么?

    正确的注册表设置如下所示:

    • [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
    • [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
    • [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

    服务器和客户端计算机都需要这些设置。 DisabledByDefault需要在 Windows 7 客户端和 Windows Server 2008 R2 服务器上创建设置Enabled。 在 Windows 8 及更高版本的客户端操作系统或 Windows Server 2012 服务器及更高版本的服务器操作系统上,应已启用 TLS 1.2。 如果要为需要独立于 OS 版本的 Windows 注册表实施部署策略,建议将提到的注册表项添加到策略。 此外,如果在 SQL Server 上使用数据库邮件,则还需要设置以下 .NET 注册表项:

    • [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 "SchUseStrongCrypto"=dword:00000001
    • [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001 "SchUseStrongCrypto"=dword:00000001
    • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 "SchUseStrongCrypto"=dword:00000001
    • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001 "SchUseStrongCrypto"=dword:00000001

已知问题

  • 问题 1

    对 SQL Server 2008、2008 R2、2012 或 2014 应用修补程序后,SQL Server Management Studio(SSMS)、报表服务器和报表管理器不会连接到数据库引擎。 报表服务器和报表管理器失败并返回以下错误消息:

    报表服务器无法打开与报表服务器数据库的连接。 所有请求和处理都要求与数据库建立连接 (rsReportServerDatabaseUnavailable)

    出现此问题的原因是 SSMS、报表管理器和 Reporting Services Configuration Manager 使用 ADO.NET,并且 ADO.NET TLS 1.2 的支持仅在 .NET Framework 4.6 中可用。 对于早期版本的 .NET Framework,必须应用 Windows 更新,以便 ADO.NET 可以支持客户端的 TLS 1.2 通信。 在早期版本的 .NET Framework 中启用 TLS 1.2 支持的 Windows 更新列在“如何了解是否需要此更新”部分的表中列出。

  • 问题 2

    即使客户端提供程序已更新到支持 TLS 1.2 的版本,Reporting Services Configuration Manager 也会报告以下错误消息:

    无法连接到服务器:已成功建立到服务器的连接,但在登录前握手期间发生了错误。

    客户端提供程序更新为支持 TLS 1.2 的版本后测试连接错误的屏幕截图。

    若要解决此问题,请在承载 Reporting Services Configuration Manager 的系统上手动创建以下注册表项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client: "Enabled"=dword:00000001

  • 问题 3

    使用 TLS 1.2 的加密终结点通信在 SQL Server 中将加密通信用于可用性组、数据库镜像或 Service Broker 时失败。 SQL 错误日志中记录了类似于以下内容的错误消息:

    Connection handshake failed. An OS call failed: (80090331) 0x80090331(The client and server cannot communicate, because they do not possess a common algorithm.). State 56.
    

    有关此问题的详细信息,请参阅 FIX:使用 SQL Server 时,与 TLS 1.2 的加密终结点通信失败。

  • 问题 4

    尝试在启用了 TLS 1.2 的服务器上安装 SQL Server 2012 或 SQL Server 2014 时,会发生各种错误。

    有关详细信息,请参阅 FIX:在启用了 TLS 1.2 的服务器上安装 SQL Server 2012 或 SQL Server 2014 时出错。

  • 问题 5

    禁用 TLS 1.2 以外的所有其他协议后,使用证书时,与数据库镜像或可用性组的加密连接不起作用。 SQL Server 错误日志中记录了类似于以下内容的错误消息:

    禁用 TLS 1.2 以外的所有其他协议后,使用证书时,与数据库镜像或可用性组的加密连接不起作用。 你可能会注意到以下症状之一:

    • 症状 1:

      SQL Server 错误日志中记录了类似于以下内容的错误消息:

      Connection handshake failed. An OS call failed: (80090331) 0x80090331(The client and server cannot communicate, because they do not possess a common algorithm.). State 58.'
      
    • 症状 2:

      Windows 事件日志中记录了类似于以下内容的错误消息:

      Log Name:      System
      Source:        Schannel
      Date:          <Date Time>
      Event ID:      36888
      Task Category: None
      Level:         Error
      Keywords:     
      User:          SYSTEM
      Computer:      ------------
      Description:
      A fatal alert was generated and sent to the remote endpoint. This may result in termination of the connection. The TLS protocol defined fatal error code is 40. The Windows SChannel error state is 1205.
      
      Log Name:      System
      Source:        Schannel
      Date:          <Date Time>
      Event ID:      36874
      Task Category: None
      Level:         Error
      Keywords:     
      User:          SYSTEM
      Computer:      -----------
      Description:
      An TLS 1.2 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The SSL connection request has failed.
      

      出现此问题的原因是可用性组和数据库镜像需要不使用固定长度哈希算法(如 MD5)的证书。 TLS 1.2 不支持固定长度哈希算法。

    有关详细信息,请参阅 FIX:如果 SQL Server 使用 TLS 1.2,则使用 MD5 哈希算法的通信失败。

  • 问题 6

    以下 SQL Server 数据库引擎版本受知识库文章 3146034中报告的间歇性服务终止问题的影响。 为使客户免受服务终止问题的保护,如果 SQL Server 版本在下表中列出,我们建议他们安装本文中提到的 SQL Server 的 TLS 1.2 更新:

    SQL Server 版本 受影响的版本
    SQL Server 2008 R2 SP3 (x86 和 x64) 10.50.6537.0
    SQL Server 2008 R2 SP2 GDR (仅限 IA-64) 10.50.4046.0
    SQL Server 2008 R2 SP2 (仅限 IA-64) 10.50.4343.0
    SQL Server 2008 SP4 (x86 和 x64) 10.0.6543.0
    SQL Server 2008 SP3 GDR (仅限 IA-64) 10.0.5544.0
    SQL Server 2008 SP3 (仅限 IA-64) 10.0.5894.0
  • 问题 7

    数据库邮件不适用于 TLS 1.2。 数据库邮件失败并出现以下错误:

    Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException:无法从数据库中读取邮件配置信息。 无法启动邮件会话。

    有关详细信息,请参阅 SQL Server 使用 TLS 1 所需的其他修补程序。

客户端或服务器上缺少 TLS 1.2 更新时可能会遇到的常见错误

问题 1

在 SQL Server 上启用 TLS 1.2 协议后,System Center Configuration Manager (SCCM)无法连接到 SQL Server。 在这种情况下,你会收到以下错误消息:

TCP 提供程序: 现有连接被远程主机强行关闭

当 SCCM 使用没有修补程序的 SQL Server Native Client 驱动程序时,可能会出现此问题。 若要解决此问题,请下载并安装客户端组件下载部分中列出的客户端修补程序。 例如, Microsoft SQL Server® 2012 Native Client - QFE®。

可以通过查看 SCCM 日志来找出哪个驱动程序 SCCM 用于连接到 SQL Server,如以下示例所示:

[SQL Server Native Client 11.0]TCP Provider: An existing connection was forcibly closed by the remote host.~~  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>
 *** [08001][10054][Microsoft][SQL Server Native Client 11.0]Client unable to establish connection  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>
 *** Failed to connect to the SQL Server, connection type: SMS ACCESS.  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>
 INFO: SQL Connection failed. Connection: SMS ACCESS, Type: Secure  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>Native Client 11.0]TCP Provider: An existing connection was forcibly closed by the remote host.~~  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>
 *** [08001][10054][Microsoft][SQL Server Native Client 11.0]Client unable to establish connection  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>
 *** Failed to connect to the SQL Server, connection type: SMS ACCESS.  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>
 INFO: SQL Connection failed. Connection: SMS ACCESS, Type: Secure  $$<Configuration Manager Setup><08-22-2016 04:15:01.917+420><thread=2868 (0xB34)>