对 Microsoft SQL Server 的 TLS 1.2 支持

适用于: SQL Server
原始 KB 编号: 3135244

简介

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

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

重要

尚未报告 Microsoft TDS 实现的已知漏洞。 这是SQL Server客户端和SQL Server数据库引擎之间使用的通信协议。 在 Windows 安全状态更新(2015 年 11 月 24 日)的 Schannel 实现中总结了 TLS 1.0 的 Microsoft Schannel 实现) 已报告给 Microsoft 的已知漏洞 (。

如何知道是否需要此更新

使用下表确定当前版本的 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 生成的最后一个 CU (CU13 - KB4019099) ,其中包括 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 - 2014 SQL Server累积更新 12

注意:KB3130923现在将安装针对 2014 RTM (CU14 发布的最后一个 CU - KB3158271 ) ,其中包括 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 SP2 和 2014 SP3 来提供对 SQL 2014 RTM 的 TLS 支持。
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 更新 - KB3194719 中提供了对 2012 SP2 GDR TLS 1.2 支持。

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 (x86/x64/IA64 SQL Server Native Client 10.0) Microsoft SQL Server 2008 和 SQL Server 2008 R2 Native Client
SQL Server Native Client 11.0 适用于 2012/2014 SQL Server (x86/x64) Microsoft SQL Server 2012 Native Client - QFE
MDAC 客户端组件 (Sqlsrv32.dll 和 Sqloledb.dll) Windows 10 版本 1809的服务堆栈更新:2020 年 11 月 10 日

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

必须安装以下 .NET 修补程序汇总才能启用SQL Server功能,例如数据库邮件和某些 SSIS 组件,这些组件使用需要 TLS 1.2 支持的 .NET 终结点,例如 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?

    是。 SQL Server 2016、Windows 上的 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

    服务器和客户端计算机都需要这些设置。 DisabledByDefaultEnabled 设置需要在 Windows 7 客户端和 Windows Server 2008 R2 服务器上创建。 在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 Management Studio (SSMS) 、报表服务器和报表管理器在为 SQL Server 2008、2008 R2、2012 或 2014 应用修补程序后不会连接到数据库引擎。 报表服务器和报表管理器失败并返回以下错误消息:

    报表服务器无法打开与报表服务器数据库的连接。 所有请求和处理都需要连接到数据库。 (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

    在 SQL Server 中使用可用性组、数据库镜像或 Service Broker 的加密通信时,使用 TLS 1.2 的加密终结点通信失败。 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.
    

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

  • 问题 4

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

    有关详细信息,请参阅修复:在启用了 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 不支持固定长度哈希算法。

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

  • 问题 6

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

    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)>