如何将 liquibase cmd 与 db2 ssl 连接一起使用?
How to use liquibase cmd with db2 ssl connection?
我正在尝试使用
运行 liquibase 更新命令
liquibase --driver="com.ibm.db2.jcc.DB2Driver" --changeLogFile="masterchangelog.xml " --url="jdbc:db2://localhost:60001/SMDINTDB:retrieveMessageFromServerOnGetMessage=true;sslConnection=true;" --username="" --password="" --classpath=/home/db2inst1/sqllib/java/db2jcc4.jar validate
但是我遇到了以下错误。谁能帮我解决这个问题?我如何指定证书的位置?
Unexpected error running Liquibase: com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][4.26.14] A communication error occurred during operations on the connection's underlying socket, socket input stream,
or socket output stream. Error location: Reply.fill() - socketInputStream.read (-1). Message: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. ERRORCODE=-4499, SQLSTATE=08001
内部部署 Db2-LUW SSL 与jdbc 的连接存在多个先决条件。
如果所有先决条件配置都已成功完成,liquibase 可以通过与本地 Db2-LUW 的 SSL 连接正常工作。这里有一些提示。
目标 Db2-LUW 实例必须已根据 IBM Db2 文档here 配置为使用 SSL。如果您正在使用来自 IBM 的基于云的 Db2 服务,那么这已经为您完成了,尽管您可能需要在客户端使用 IBM 提供的根证书。
您的客户端 JRE 需要根据 IBM 的 Db2-LUW 文档进行配置 here。我将 IBM JRE(与 Db2-LUW 服务器一起提供)用于 liquibase。
对于本地 Db2-LUW,您的客户端需要创建 java 密钥库,并将服务器证书导入其中 (keytool -importcert -file /your/path/to/server_certificate ...
)。
对于您的特定错误,对于本地 Db2-LUW,您可以尝试连接字符串中的其他选项来告诉 JRE 如何访问您已经导入服务器证书的客户端密钥库.具体来说 sslTrustStoreLocation=/path/to/.keystore;sslTrustStorePassword=whatever;
。请注意,如果使用 Db2-on-cloud,我不需要这些选项(一旦我将 DigiCertGlobalRootCA.crt 添加到我的密钥库,liquibase 就可以正确地使用 SSL 到 Db2-on-cloud(尽管这可能是不必要的),但我做到了不要尝试 Db2-warehouse-on-cloud,因为我不使用该服务。
我正在尝试使用
运行 liquibase 更新命令liquibase --driver="com.ibm.db2.jcc.DB2Driver" --changeLogFile="masterchangelog.xml " --url="jdbc:db2://localhost:60001/SMDINTDB:retrieveMessageFromServerOnGetMessage=true;sslConnection=true;" --username="" --password="" --classpath=/home/db2inst1/sqllib/java/db2jcc4.jar validate
但是我遇到了以下错误。谁能帮我解决这个问题?我如何指定证书的位置?
Unexpected error running Liquibase: com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][4.26.14] A communication error occurred during operations on the connection's underlying socket, socket input stream,
or socket output stream. Error location: Reply.fill() - socketInputStream.read (-1). Message: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. ERRORCODE=-4499, SQLSTATE=08001
内部部署 Db2-LUW SSL 与jdbc 的连接存在多个先决条件。 如果所有先决条件配置都已成功完成,liquibase 可以通过与本地 Db2-LUW 的 SSL 连接正常工作。这里有一些提示。
目标 Db2-LUW 实例必须已根据 IBM Db2 文档here 配置为使用 SSL。如果您正在使用来自 IBM 的基于云的 Db2 服务,那么这已经为您完成了,尽管您可能需要在客户端使用 IBM 提供的根证书。
您的客户端 JRE 需要根据 IBM 的 Db2-LUW 文档进行配置 here。我将 IBM JRE(与 Db2-LUW 服务器一起提供)用于 liquibase。
对于本地 Db2-LUW,您的客户端需要创建 java 密钥库,并将服务器证书导入其中 (
keytool -importcert -file /your/path/to/server_certificate ...
)。对于您的特定错误,对于本地 Db2-LUW,您可以尝试连接字符串中的其他选项来告诉 JRE 如何访问您已经导入服务器证书的客户端密钥库.具体来说
sslTrustStoreLocation=/path/to/.keystore;sslTrustStorePassword=whatever;
。请注意,如果使用 Db2-on-cloud,我不需要这些选项(一旦我将 DigiCertGlobalRootCA.crt 添加到我的密钥库,liquibase 就可以正确地使用 SSL 到 Db2-on-cloud(尽管这可能是不必要的),但我做到了不要尝试 Db2-warehouse-on-cloud,因为我不使用该服务。