sqlserver连接问题
# sql server 2008连接问题
其实是同一个问题,我这里拆解为两个问题
都是HW结束后启动服务器后发现的,HW前没有任何问题;至今也没找到具体发生的原因是什么
# 问题1:SSMS连接sql server 2008时报错
描述1:HW前是可以正常连接的
描述2:SSMS和sql server都部署在同一台机器,属于是本地连接
问题截图1(连接报错):
问题截图2(windows 日志):
具体原因解释:客户端和服务器的加密算法没有交集,导致握手失败;在 TLS 1.0 协议下,服务器和客户端的加密算法不匹配
# 处理
在 Windows Server(尤其是 Server 2008 R2、SQL Server 2008 等老系统)里,TLS 1.0 下的默认加密套件是比较少的
直接去组策略编辑器中加上一些旧的 Cipher Suite
- 打开组策略编辑器(gpedit.msc)
- 来到计算机配置 → 管理模板 → 网络 → SSL 配置设置
- 双击SSL 加密套件顺序
- 重写策略内容如下
- 重启服务器
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA
1
重启服务器后再次用SSMS连接,成功了
# 解释
原来的 Cipher Suite 全是 ECDHE/ECDSA 和 ECDHE/RSA 的套件,而且几乎都是 TLS 1.2+ 的 GCM 或 CBC 高级算法, TLS 1.0 根本用不到这些套件,所以当客户端发 TLS 1.0 请求时,服务器找不到匹配的算法,就报了 36874
# 问题2:远程Java应用连接sql server 2008时报错
描述1:和上面的问题是一样的
此项目Tomcat启动时报错《数据库连接不上》,我的排错方式:
- 确定数据库服务器能正常通信:ping、telnet 数据库服务器,发现都是通的
- 查看Java应用本地错误日志:过滤 Tomcat 各种错误日志,寻找错误:发现关键问题【The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server 未返回响应。连接已关闭。"】,可以确保的是能连接到数据库服务器,也可以正常访问数据库,但是因为算法的问题导致没有连接上
- 排错服务器端windows日志:从上面的排错来看,基本上可以确定又是因为算法不同的问题连接不上;果然在windows日志中找到了错误【客户端和服务器的加密算法没有交集,导致握手失败;在 TLS 1.0 协议下,服务器和客户端的加密算法不匹配】
# 处理
经过排查,发现是服务端没有支持 Java 8 的 TLS1.0 cipher suite
让AI生成后加上
TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521
1
加上后重启服务器,然后Java应用就可以连接数据库了
上次更新: 8/22/2025, 10:15:41 AM