问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL Server 升级到 TLS 1.2 后 SSL 错误解决方案

创作时间:
作者:
@小白创作中心

SQL Server 升级到 TLS 1.2 后 SSL 错误解决方案

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/troubleshoot/sql/database-engine/connect/ssl-errors-after-tls-1-2?view=sql-server-2017

本文主要讨论了在 SQL Server 中升级到 TLS 1.2 后可能会遇到的 SSL 错误问题,并提供了详细的解决方案。文章内容包括问题现象、具体错误信息以及详细的解决步骤,还包含了检查 TLS 协议和密码套件的指导。

现象

在将 TLS 协议升级到 TLS 1.2 后,可能会遇到以下问题:

  • Microsoft SQL Server 使用由弱哈希算法签名的证书。此类证书包括 MD5、SHA224 和 SHA512。
  • TLS 1.2 升级仅应用于客户端或服务器,但不适用于这两者。
  • TLS 1.0 已禁用。
  • 客户端和服务器之间没有匹配的加密算法。

在此方案中,升级完成后可能会遇到以下错误:

  • 命名管道
    已成功与服务器建立连接,但在登录过程中发生错误。 (提供程序:SSL 提供程序,错误:0 - 管道的另一端没有进程)Microsoft SQL Server,错误:233。

  • TCP
    已成功与服务器建立连接,但在登录过程中发生错误。 (提供程序:SSL 提供程序,错误:0 - 远程主机 10054 强行关闭连接)Microsoft SQL Server,错误:233。

解决方法

若要解决这些错误,请执行以下步骤:

  1. 打开 SQL Server 配置管理器,右键单击 InstanceName > 的<协议,然后选择“属性”。
  2. 选择“证书”选项卡,并检查正在使用的证书。
  • 如果证书存在,请选择“视图”以检查它,然后选择“清除”。 然后,转到步骤 4。
  • 如果不存在证书,请检查 SQL Server 错误日志文件以获取哈希代码。 你可能会看到以下条目之一:
    2023-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption.
    
    2023-05-19 04:58:56.42 spid11s A self-generated certificate was successfully loaded for encryption.
    
    如果证书是自生成的,请跳到步骤 2。
  1. Microsoft管理控制台(MMC)中打开计算机证书存储
  2. 导航到个人证书
  3. 展开“预期用途”列,然后双击为服务器身份验证启用的证书。
  4. 检查指纹是否与错误日志文件中的指纹匹配。 如果没有,请尝试其他证书。
  5. 检查签名哈希算法。 如果它是 MD5、SHA224 或 SHA512,则它不支持 TLS 1.2。 如果它是弱算法之一,请禁用服务器身份验证,以便 SQL Server 无法使用它。
  6. 如果在SQL Server 配置管理器中显式指定了证书,请选择“清除将其删除。
  7. 在 MMC 中找到证书。
  8. 在 MMC 中,右键单击证书,然后选择“属性”。
  9. “常规”选项卡上,完全禁用证书或有选择地禁用服务器身份验证
  10. 保存更改。
  11. 请重新启动 SQL Server。
    错误日志现在应指示使用自生成证书。 如果问题得到解决,SQL Server 可以使用自签名证书成功运行。 如果需要 Verisign 或其他证书,则必须要求证书提供程序确保使用适用于 TLS 1.2 的强哈希。 如果未解决问题,请返回到步骤 2。

检查已启用和禁用的 TLS 协议

若要检查已启用和禁用的 TLS 协议,请执行以下步骤:

  1. 如果尚未执行此操作,请检查后台和基本升级工作流。
    必须升级客户端和服务器才能强制实施 TLS 1.2。 如有必要,可以升级服务器,但保持 TLS 1.0 已启用,以便非升级的客户端可以连接。
  2. 使用 REGEDIT 检查 SSL 或 TLS 注册表。
    可以在以下注册表子项下找到已启用和禁用的 SSL 或 TLS 版本:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

每个版本的 SSL 或 TLS 都有客户端和服务器子项,同时具有“已启用”“禁用”值:

[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

注意:任何非零值都被视为 TRUE。 但是,通常首选 1而不是FFFFFFFF(或-1)。
3. 确保没有不兼容的设置。
例如,禁用 TLS 1.0 并在服务器上启用 TLS 1.2。 这是因为这些设置可能与客户端上的设置不匹配,或者客户端驱动程序可能不会更新。
可以通过设置

Enabled=0

TLS 1.2(如果禁用 TLS 1.0)来测试这种情况。
4. 重启 SQL Server 以检查问题是否与 TLS 1.2 相关,还是常规问题。

没有匹配的密码套件

可以检查客户端和服务器 TLS 版本以及数据包中的
Client Hello
Server Hello
密码套件。 数据包
Client Hello
播发所有客户端密码套件,数据包
Server Hello
指定一个密码套件。 如果没有匹配的套件,服务器会关闭连接,而不是通过发送数据包做出
Server Hello
响应。
如果网络跟踪不可用,可以在以下注册表子项下检查函数值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002

如果看不到匹配算法,请联系Microsoft 支持部门。 为了协助支持工程师,请根据高级 SSL 数据捕获中指定的捕获网络跟踪或 BID 跟踪。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号