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

Spring Boot通过AD用户连接Azure SQL数据库失败问题排查

问题解决方案

核心原因

出现该错误是因为MSAL4J(AAD认证依赖库)向Azure AD请求令牌时,无法验证SSL证书的信任链——你在JDBC URL中配置的trustServerCertificate=true仅作用于数据库连接阶段的SSL校验,不覆盖AAD令牌请求的SSL信任逻辑。


具体解决步骤

1. 升级/替换JDBC驱动

sqljdbc4:4.0版本老旧,对新版Azure AD认证的SSL支持不完善,建议仅保留com.microsoft.sqlserver:mssql-jdbc:12.4.2.jre11(或更高兼容版本),移除旧的sqljdbc4依赖。

2. 临时测试方案(仅开发/测试环境使用)

在Spring Boot应用的启动参数中添加JVM级SSL信任参数,跳过证书校验(生产环境禁止使用):

-Djavax.net.ssl.trustStoreType=JKS
-Djavax.net.ssl.trustStore=${JAVA_HOME}/lib/security/cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Dcom.sun.net.ssl.checkRevocation=false

如果用IDE启动,直接在VM options中添加上述参数即可。

3. 生产环境正式方案:导入根证书到JVM信任库

Azure SQL和Azure AD使用DigiCert Global Root CA,多数新版本JRE的信任库已包含该证书,若你的JRE版本过老,需手动导入:

  • 获取证书:Windows系统中,打开「管理计算机证书」→ 展开「受信任的根证书颁发机构」→ 找到「DigiCert Global Root CA」,右键选择「所有任务」→「导出」,保存为DER编码的二进制X.509格式(文件名如DigiCertGlobalRootCA.crt);Linux/macOS可从系统信任库导出对应证书。
  • 导入到JVM信任库:使用keytool命令执行导入(默认信任库密码为changeit):
    keytool -importcert -file DigiCertGlobalRootCA.crt -alias DigiCertGlobalRootCA -keystore ${JAVA_HOME}/lib/security/cacerts -storepass changeit
    
    注意:JDK 11及以上版本信任库路径为${JAVA_HOME}/lib/security/cacerts,JDK 8为${JAVA_HOME}/jre/lib/security/cacerts。

4. 优化JDBC URL配置

确保URL参数格式规范,可简化为:

url: jdbc:sqlserver://xz.database.windows.net:1433;databaseName=xz;authentication=ActiveDirectoryPassword;encrypt=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30

去掉末尾多余分号,将database改为官方规范的databaseName参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:13