Spring Boot连接SQL Server时TLS版本不兼容问题求助
解决Java 17连接SQL Server的TLS协议不匹配问题
问题核心
Java 17默认禁用了TLS 1.0这类弱加密协议,而你的SQL Server仅启用了TLS 1.0,导致客户端与服务端无法协商出兼容的SSL协议版本,从而抛出连接错误。
推荐解决方案(安全合规):升级SQL Server的TLS版本
优先建议在SQL Server所在服务器上启用TLS 1.2或更高版本,同时禁用TLS 1.0,步骤如下:
- 打开注册表编辑器,导航至
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols - 针对TLS 1.2:
- 新建
TLS 1.2项,在其下分别创建Client和Server子项 - 在
Client和Server项下各新建两个DWORD值:DisabledByDefault设为0,Enabled设为1
- 新建
- 针对TLS 1.0:
- 找到已存在的
TLS 1.0项(若无则忽略),将其Client和Server项下的Enabled设为0,DisabledByDefault设为1
- 找到已存在的
- 重启SQL Server所在服务器,使配置生效
完成后,Java 17默认支持TLS 1.2,无需额外修改客户端配置即可正常连接。
临时方案(仅用于测试/无法升级服务端场景)
若暂时无法升级服务端,需修改Java 17的配置以启用TLS 1.0支持:
- 修正数据源URL参数
原URL中的database参数错误,SQL Server JDBC驱动的正确参数为databaseName,修正后URL:jdbc:sqlserver://192.xyz.x.xy;databaseName=apr.pro;encrypt=true;trustServerCertificate=true - 调整VM启动参数
添加VM参数,指定允许的TLS协议:-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2 - 修改Java安全配置
找到Java 17安装目录下的conf/security/java.security文件,定位到jdk.tls.disabledAlgorithms行,移除其中的TLSv1条目,保存后重启应用。
内容的提问来源于stack exchange,提问作者Neri
相关产品推荐
相关产品推荐

