使用ActiveDirectoryPassword认证通过JDBC连接Azure Synapse DB失败
问题根因
你引入的依赖版本已经满足ActiveDirectoryPassword认证的要求,不需要额外添加其他依赖。
报错PKIX path building failed是SSL证书校验失败导致的:你代码里设置的setTrustServerCertificate(true)仅对JDBC和Azure Synapse数据库之间的连接SSL校验生效,而AD认证过程中MSAL4J会请求Azure AD的接口,这部分请求的SSL校验走的是JDK默认的信任链逻辑,你的JDK信任库中缺少Azure AD接口所用的根证书,因此校验失败。
解决方案
方案1:升级JDK8小版本(最简便)
如果你的JDK8版本低于8u181,直接升级到最新的JDK8正式版即可,新版JDK8的默认信任库已经包含了Azure AD所用的DigiCert根证书,无需额外配置。
方案2:手动导入根证书到JDK信任库
如果不方便升级JDK,可以手动导入证书:
- 用浏览器访问
https://login.microsoftonline.com,导出站点的根证书(一般是DigiCert Global Root G2,格式选CER即可) - 执行keytool命令导入到JDK信任库:
keytool -importcert -alias digicert_global_root_g2 -file 你导出的证书本地路径.cer -keystore $JAVA_HOME/jre/lib/security/cacerts
- 当提示输入信任库密码时,输入JDK默认信任库密码
changeit,确认导入即可。 - 重启应用验证连接。
方案3:自定义信任库(不修改全局JDK配置)
如果不想改动全局JDK的信任库,可以在应用启动时添加JVM参数指定自定义信任库:
-Djavax.net.ssl.trustStore=自定义信任库文件路径 -Djavax.net.ssl.trustStorePassword=自定义信任库密码
注意:网上流传的禁用SSL校验的方案仅可用于本地临时测试,生产环境禁止使用,会带来严重的安全风险。
内容的提问来源于stack exchange,提问作者techcrazy007
相关产品推荐
相关产品推荐

