如何通过Liquibase CLI实现TLS加密的数据库连接并执行变更
Liquibase CLI 配置TLS加密数据库连接方案
Liquibase CLI底层基于Java运行,和业务服务的Java TLS连接逻辑完全一致,只需要将Keystore、Truststore配置传入Liquibase运行时的JVM即可,以下是两种常用配置方案:
方式1:执行命令时直接传入JVM参数
无需修改全局配置,单次执行时传入参数即可,以MySQL为例,其他数据库仅需调整对应JDBC的SSL连接参数:
JAVA_OPTS="-Djavax.net.ssl.keyStore=/path/to/your/keystore.jks \ -Djavax.net.ssl.keyStorePassword=你的keystore密码 \ -Djavax.net.ssl.trustStore=/path/to/your/truststore.jks \ -Djavax.net.ssl.trustStorePassword=你的truststore密码" \ liquibase update \ --url="jdbc:mysql://数据库地址:端口/库名?useSSL=true&requireSSL=true&verifyServerCertificate=true" \ --username=数据库账号 \ --password=数据库密码 \ --changelog-file=changelog.xml
不同数据库JDBC URL的SSL必填参数参考:
- MySQL:
useSSL=true&requireSSL=true&verifyServerCertificate=true - PostgreSQL:
ssl=true&sslmode=verify-full - Oracle:
oracle.net.ssl_server_dn_match=true
方式2:配置全局默认参数(适合多变更场景复用)
修改Liquibase本地配置,后续执行命令无需重复传参:
- 找到Liquibase安装目录下的
liquibase.properties文件,新增数据库连接配置:
url: jdbc:mysql://数据库地址:端口/库名?useSSL=true&requireSSL=true&verifyServerCertificate=true username: 数据库账号 password: 数据库密码 changelog-file: changelog.xml
- 在同目录下新建
liquibase.env文件,写入JVM SSL参数:
JAVA_OPTS=-Djavax.net.ssl.keyStore=/path/to/your/keystore.jks -Djavax.net.ssl.keyStorePassword=你的keystore密码 -Djavax.net.ssl.trustStore=/path/to/your/truststore.jks -Djavax.net.ssl.trustStorePassword=你的truststore密码
- 配置完成后直接执行
liquibase update即可自动加载TLS参数完成变更。
Docker镜像运行的额外配置
如果使用官方Liquibase Docker镜像执行操作,需要额外将本地JKS文件挂载到容器内:
docker run -v /本地JKS目录:/容器内JKS目录 \ -v /本地changelog目录:/changelog \ -e JAVA_OPTS="-Djavax.net.ssl.keyStore=/容器内JKS目录/keystore.jks -Djavax.net.ssl.keyStorePassword=你的keystore密码 -Djavax.net.ssl.trustStore=/容器内JKS目录/truststore.jks -Djavax.net.ssl.trustStorePassword=你的truststore密码" \ liquibase/liquibase update
常见排错点
- JKS文件必须使用绝对路径,确认Liquibase进程有文件读取权限
- JKS密码含特殊字符时,需要用单引号包裹或者添加转义符
- 生成JKS的JDK版本需要和Liquibase运行依赖的JDK版本一致,避免格式不兼容
- 自签名证书必须提前导入到Truststore中,否则会触发证书校验失败错误
内容的提问来源于stack exchange,提问作者vijay
相关产品推荐
相关产品推荐

