解决 SQL Server 连接报错:TLS10不被客户端接受 [TLS12]

Finn
Finn
发布时间:2026-10-15| 2人浏览过
原创

在使用基于Java的应用(如Druid连接池)连接SQL Server时,若遇到SSL协议版本不匹配导致的连接失败,通常是因为服务器端启用了旧版TLS 1.0,而客户端默认强制要求TLS 1.2及以上版本。通过修改本地JDK/JRE的安全策略配置文件,禁用算法限制并显式允许旧协议,可解决该问题。

问题现象与日志分析

在应用启动或新建数据库连接时,控制台或日志文件中出现如下异常堆栈:

com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

核心错误信息为 The server selected protocol version TLS10 is not accepted by client preferences [TLS12]。这表明SQL Server服务器在握手过程中选择了 TLS1.0 协议,但当前运行的Java客户端(JVM)策略中已将该版本标记为不安全或被禁用,只接受了 TLS1.2 及更高版本。

第1步:定位JDK/JRE目录与Security文件

要修改此行为,需要编辑JVM的全局安全策略文件 java.security。请根据实际安装路径找到该文件。

  • JDK路径示例:C:\Program Files (x86)\Java\jdk1.8.0_291\jre\lib\security\java.security
  • JRE路径示例:C:\Program Files (x86)\Java\jre1.8.0_291\lib\security\java.security

注意:务必使用管理员权限打开文本编辑器(如Notepad++或VS Code),否则无法保存对系统目录文件的修改。

第2步:修改 jdk.tls.disabledAlgorithms 策略

在 java.security 文件中,搜索关键字 jdk.tls.disabledAlgorithms。该行定义了被禁止使用的传输层安全(TLS)协议和加密套件。

找到类似如下的配置行:

#jdk.tls.disabledAlgorithms=MD5, RSA, DH keySize < 768, ...

操作说明:

  1. 检查该行内容是否包含 TLSv1、TLSv1.1 或 3DES_EDE_CBC。
  2. 如果存在这些旧协议标识,说明客户端已主动禁用它们。
  3. 为了兼容仅支持TLS 1.0的SQL Server,可以将这些协议从黑名单中移除,或者在允许列表中显式添加白名单(视具体JVM版本支持情况而定,通常在JDK 8u291+版本中,直接注释或删除禁用的特定协议项更为直接,但需谨慎评估安全风险)。

如图所示,定位到 jdk.tls.disabledAlgorithms 参数位置。

第3步:验证JDK与JRE一致性

部分部署环境中,应用程序可能优先加载 jre 目录而非 jdk 目录。如果仅在 jdk/jre/lib/security/ 下修改后重启服务仍报错,建议同时修改 jre 根目录下的 lib/security/java.security 文件,确保两处配置一致。

对比确认 jdk 和 jre 两个目录中的 java.security 文件均已更新。

第4步:重启应用并测试连接

修改配置文件后,必须完全重启Java应用程序才能使JVM重新加载安全策略。重启后,尝试重新发起SQL Server连接请求。

观察日志,若不再出现 SSLHandshakeException 且能正常创建连接,则问题解决。

排错与安全提醒

  • 备份原文件:在修改 java.security 之前,务必备份原始文件(例如重命名为 java.security.bak),以便出错时快速回滚。
  • 安全风险:启用TLS 1.0会降低通信安全性,容易遭受中间人攻击。强烈建议联系DBA升级SQL Server以支持TLS 1.2。上述方法仅为临时兼容手段。
  • 其他参数:某些极端情况下,可能还需要调整 jsse.enableSNIExtension 或JDBC URL中的加密设置(如 encrypt=false,但这会丧失SSL功能,不建议在生产环境使用)。

总结

通过上述步骤,我们解决了因JVM默认禁用TLS 1.0而导致的SQL Server连接拒绝问题。关键在于修正 jdk.tls.disabledAlgorithms 策略。请注意,这涉及系统级安全配置变更,请在理解风险后操作,并尽快规划向TLS 1.2以上的迁移方案。

以上就是SQL Server驱动SSL加密失败 TLS10 rejected by client [TLS12]的详细内容,更多关于SQL Server TLS配置优化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。