未启用TLS 1.0时SSMS 18无法连接SQL Server 2014 SP3的配置咨询
核心问题定位
当前连接故障由三层原因叠加导致:
- 未安装TLS1.2适配更新的SQL Server 2014实例不会在Schannel层注册TLS1.2监听端点,仅响应TLS1.0/1.1握手请求
- Windows Server 2016默认未主动开启TLS1.2服务端监听配置,Schannel组件不会向上层应用暴露TLS1.2握手能力
- 客户端.NET框架未强制启用强加密时,部分旧版SQL连接驱动会优先尝试TLS1.0握手,被服务器拒绝后直接抛出连接错误,不会自动尝试TLS1.2协议
前置版本/组件要求
服务器端(Windows Server 2016 + SQL Server 2014 SP3)
- 将SQL Server 2014 SP3升级到SP3 CU4及以上版本,初始SP3版本存在TLS1.2握手内存泄漏bug,高版本已修复且完整支持TLS1.2
- 安装Microsoft OLE DB Driver for SQL Server 18.x版本,替换系统自带的旧版SQL Server Native Client 11.0(旧版客户端最高仅支持TLS1.1)
- 安装Windows Server 2016发布的最新月度累积更新,修复初始RTM版本Schannel组件的TLS1.2握手兼容性问题
客户端(Windows 10 + SSMS 18 + .NET Framework 4.8)
- 无需升级.NET Framework 4.8,该版本原生支持TLS1.2
- 同服务器端一致,安装Microsoft OLE DB Driver for SQL Server 18.x版本,SSMS 18会优先调用该驱动建立连接
- 确认Windows 10未被第三方优化工具禁用Schannel组件的TLS1.2能力,Win10 1809及以后版本默认开启TLS1.2客户端模式
服务器端配置步骤
- 打开注册表编辑器,定位到路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols - 新建TLS1.2相关子项与键值:
- 新建子项
TLS 1.2\Server,在项下创建2个DWORD(32位)值:Enabled,数值数据设为1DisabledByDefault,数值数据设为0
- 新建子项
TLS 1.2\Client,在项下创建2个DWORD(32位)值:Enabled,数值数据设为1DisabledByDefault,数值数据设为0
- 新建子项
- (符合安全规范必做)禁用旧版TLS协议:
对TLS 1.0、TLS 1.1分别创建Server和Client子项,每个子项下均创建2个DWORD(32位)值:Enabled,数值数据设为0DisabledByDefault,数值数据设为1
注意:Schannel协议配置修改后必须重启Windows Server服务器才能生效,重启前提前保存业务侧数据。
- 服务器重启完成后,打开SQL Server配置管理器,定位到对应实例的「SQL Server网络配置」,将
Force Encryption选项设置为是,证书可选择企业CA颁发的可信证书,无专用证书时SQL Server会在服务启动时自动生成自签名证书用于TLS握手。 - 重启SQL Server数据库引擎服务与SQL Server Browser服务,打开Windows事件查看器的应用程序日志,找到来源为MSSQLSERVER的事件,确认无证书加载、端点监听报错,即说明服务端TLS1.2配置正常。
客户端(Win10笔记本)配置步骤
- 打开注册表编辑器,定位到路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols - 确认/配置TLS协议键值:
TLS 1.2\Client子项下,设置Enabled=1、DisabledByDefault=0- (符合安全规范必做)TLS 1.0、TLS 1.1的
Client子项下,设置Enabled=0、DisabledByDefault=1
- 配置.NET框架强加密规则,强制所有.NET应用优先使用TLS1.2:
- 定位到路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319,新建DWORD(32位)值SchUseStrongCrypto,数值数据设为1 - 定位到路径
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319,新建DWORD(32位)值SchUseStrongCrypto,数值数据设为1
第二条配置针对32位应用生效,SSMS 18为32位程序,该键值必须配置否则强加密规则不生效。
- 定位到路径
- 重启笔记本,重启后打开SSMS 18,在连接窗口的「连接属性」页勾选「加密连接」选项,输入实例信息正常连接即可。
连接有效性验证
连接成功后在SSMS中执行如下SQL语句:
SELECT session_id, connect_time, net_transport, encrypt_option, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID
返回结果中encrypt_option字段值为TRUE时,说明连接已走加密通道;可同时在服务器端性能监视器中添加Schannel类别下的「TLS 1.2 Server Handshakes」计数器,发起连接时计数器数值上涨即可确认当前连接使用TLS1.2协议,未调用TLS1.0。
内容的提问来源于stack exchange,提问作者ChrisRG
相关产品推荐
相关产品推荐

