我正在尝试使用运行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
使用jdbc进行内部部署Db2 LUW SSL连接有几个先决条件。如果所有先决条件配置都成功完成,那么liquibase可以正确地使用SSL连接到本地Db2 LUW。以下是一些提示。
-
必须根据此处的IBM Db2文档为SSL配置目标Db2 LUW实例。如果您使用的是来自IBM的基于云的Db2服务,那么这已经为您完成了,尽管您可能需要在客户端使用IBM提供的根证书。
-
您的客户端JRE需要根据此处的IBM Db2 LUW文档进行配置。我将IBMJRE(与Db2LUW服务器一起提供(用于liquibase。
-
对于内部部署Db2LUW,客户端需要创建java密钥库,并将服务器的证书导入其中(
keytool -importcert -file /your/path/to/server_certificate ...
(。 -
对于您的特定错误,对于内部部署Db2 LUW,您可以尝试连接字符串中的其他选项来告诉JRE如何访问已导入服务器证书的客户端密钥库。特别是CCD_ 2。请注意,如果在云上使用Db2,我不需要这些选项(当我将DigiCertGlobalRootCA.crt添加到我的密钥库中时,likibase可以正确地使用SSL到云上的Db2(尽管这可能是不必要的(,但我没有尝试云上的Db2仓库,因为我不使用该服务。