0

我正在尝试使用运行 liquibase update 命令

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
4

1 回答 1

1

本地Db2-LUW SSL 与 jdbc 的连接存在几个先决条件。如果所有先决条件配置均已成功完成,liquibase 可以正确使用与本地 Db2-LUW 的 SSL 连接。这里有一些提示。

  • 目标 Db2-LUW 实例必须已根据此处的 IBM Db2 文档配置为 SSL 。如果您使用的是 IBM 提供的基于云的 Db2 服务,那么这已经为您完成了,尽管您可能需要在客户端使用 IBM 提供的根证书。

  • 您的客户端 JRE 需要在此处按照 IBM 的 Db2-LUW 文档进行配置。我将 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 因为我不使用该服务。

于 2019-10-29T14:49:34.700 回答