You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Java17后Liquibase连接SQL Server出现TLS协议不匹配报错如何解决?

问题根因

你使用的Microsoft SQL Server 2012 Express(版本号11.0.2100.60对应SQL Server 2012)默认仅启用TLS 1.0协议,而Java 17默认安全配置禁用了TLS 1.0、TLS 1.1,仅允许TLS 1.2、TLS 1.3,同时9.x以上版本的mssql-jdbc驱动默认强制加密连接,因此触发协议不匹配的报错。

解决方案

方案1:服务端启用TLS 1.2(推荐,无安全风险)

SQL Server 2012本身支持TLS 1.2,手动开启即可永久解决问题:

  • 先安装SQL Server 2012 Service Pack 4及以上补丁,确保服务端已支持TLS 1.2
  • 打开Windows注册表编辑器,定位到路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
  • 新建名为TLS 1.2的项,在该项下再新建Client、Server两个子项
  • 在Server子项中新建两个DWORD值:
    • 名称为DisabledByDefault,值设置为0
    • 名称为Enabled,值设置为1
  • 在Client子项中新建和上面完全相同的两个DWORD值,配置保持一致
  • 重启操作系统,重启SQL Server服务后配置生效

方案2:修改JDBC连接参数(仅本地开发环境使用,存在安全风险)

如果是本地开发不想修改服务端配置,可以直接修改Liquibase的JDBC连接URL,添加参数跳过加密校验和TLS版本限制:

原URL:
jdbc:sqlserver://localhost:1433;databaseName=My_Database;integratedSecurity=true
修改后URL:
jdbc:sqlserver://localhost:1433;databaseName=My_Database;integratedSecurity=true;encrypt=false;trustServerCertificate=true
如果仍报错,可额外添加tlsVersions=TLSv1.0参数强制使用TLS 1.0协议,完整URL如下:
jdbc:sqlserver://localhost:1433;databaseName=My_Database;integratedSecurity=true;encrypt=false;trustServerCertificate=true;tlsVersions=TLSv1.0

方案3:修改Java 17安全配置(不推荐)

也可以通过修改JDK默认安全规则放开TLS 1.0限制:

  • 找到Java 17安装目录下的conf/security/java.security文件
  • 搜索jdk.tls.disabledAlgorithms配置项,删除配置值中的TLSv1、TLSv1.1条目
  • 保存文件后重启IDE、Maven进程即可生效

内容的提问来源于stack exchange,提问作者victorio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:15:03