Java 17环境下Spring Boot 2.7.5连接SQL Server 13失败求助
解决Java 17 + Spring Boot 2.7.5连接SQL Server 13的SSL证书算法约束问题
问题根源
Java 17默认安全策略收紧了加密算法限制,RSA 1024位密钥被列入禁用列表,而你的SQL Server 13使用的证书恰好是1024位RSA密钥,导致SSL连接触发算法约束校验失败。
可行解决方案
1. 临时放宽JVM安全约束(快速解决)
给Spring Boot应用添加JVM启动参数,移除对RSA 1024位密钥的限制:
-Djdk.tls.disabledAlgorithms="SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224" -Djdk.certpath.disabledAlgorithms="MD2, MD5, SHA1 jdkCA & usage TLSServer, RSA keySize < 1024"
注意:此方法会降低JVM安全级别,仅建议在测试环境或无法更新服务器证书的临时场景使用。
2. 修改JDK全局安全配置(持久化解决)
找到Java 17安装目录下的conf/security/java.security文件,调整以下两个配置项:
- 将
jdk.tls.disabledAlgorithms中的RSA keySize < 2048替换为RSA keySize < 1024 - 将
jdk.certpath.disabledAlgorithms中的RSA keySize < 2048替换为RSA keySize < 1024
修改后保存文件,重启Spring Boot应用即可生效。
3. 升级JDBC驱动版本
你提到IntelliJ使用11.2.1驱动可正常连接,建议将项目依赖升级到com.microsoft.sqlserver:mssql-jdbc:11.2.1.jre17,该版本可能修复了Java 17下的证书兼容性问题。同时确保连接URL参数正确:
jdbc:sqlserver://{SERVER_URL};databaseName={你的数据库名};encrypt=true;trustServerCertificate=true;loginTimeout=30
4. 根源修复(推荐长期方案)
联系DBA将SQL Server 13的证书更新为RSA 2048位及以上密钥,符合Java 17安全规范,彻底解决兼容性问题。
为什么IntelliJ可以正常连接?
IntelliJ可能自带定制化JDK环境,或其内置JDBC连接客户端默认放宽了算法约束,因此能绕过该校验。
内容的提问来源于stack exchange,提问作者Brent Gammon
相关产品推荐
相关产品推荐

