Flyway使用Active Directory认证连接SQL Server出现SSL PKIX错误求替代方案
Flyway AD身份认证PKIX证书错误免导入解决方案
你遇到的报错是SQL Server JDBC驱动不信任数据库服务端返回的SSL证书,导致TLS握手失败,以下两种方案均无需提前导入证书到信任库即可解决:
方法1:修改JDBC连接URL(最便捷,优先推荐)
在你现有的flyway.url配置末尾追加trustServerCertificate=true参数即可,修改后的配置示例:
flyway.url=jdbc:sqlserver://<数据库地址>:<端口>;databaseName=<数据库名称>;authentication=ActiveDirectoryInteractive;ssl=true;trustServerCertificate=true
该参数会让JDBC驱动直接信任SQL Server返回的SSL证书,跳过证书链校验,不会影响Active Directory身份认证的逻辑
方法2:添加全局JVM参数(适用于无法修改连接URL的场景)
如果受限于现有配置规则无法修改连接URL,可以在启动Flyway时追加JVM全局参数实现证书校验跳过:
-Dcom.microsoft.sqlserver.jdbc.trustServerCertificate=true
如果是Windows系统环境,也可以配置JVM直接调用系统根证书库验证,不需要跳过校验也不用单独导入证书:
-Djavax.net.ssl.trustStoreType=Windows-ROOT
注意事项
- 跳过证书校验的方案更适合开发测试环境使用,生产环境如果对链路加密安全要求极高,还是建议导入SQL Server证书到JDK信任库实现合规校验
- 如果你使用Flyway命令行版本,可以直接在
flyway.conf中修改url参数,也可以在启动命令中追加参数-flyway.url=xxx;trustServerCertificate=true覆盖原有配置 - 如果你使用Maven/Gradle Flyway插件运行任务,直接在插件配置的url参数里追加
trustServerCertificate=true即可生效
内容的提问来源于stack exchange,提问作者Ammara
相关产品推荐
相关产品推荐

