Db2 Warehouse:如何使用 SSL 与 ibm 数据服务器驱动程序进行连接
Posted
技术标签:
【中文标题】Db2 Warehouse:如何使用 SSL 与 ibm 数据服务器驱动程序进行连接【英文标题】:Db2 Warehouse: How to connect using SSL with ibm data server driver 【发布时间】:2019-06-12 10:14:31 【问题描述】:尝试从 clpplus
连接到 Db2 Warehouse Local 时,如下所示出现错误
````
clpplus -nw db2inst1@WP
````
jcc][t4][2030][11211][4.24.92] 期间发生通信错误 对连接的底层套接字、套接字输入流的操作, 或套接字输出流。错误位置:Reply.fill() - socketInputStream.read (-1)。信息: sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效认证路径。错误代码=-4499, SQLSTATE=08001
我的数据库启用了 SSL,我已经在 Mac 上下载了 IBM 数据服务器客户端并创建了 db2dsdriver.cfg,如下所示
db2cli writecfg add -database BLUDB -host db2inst1.zc.com -port 50001
db2cli writecfg add -dsn WP -database BLUDB -host db2inst1.zc.com -port 50001
db2cli writecfg add -database BLUDB -host db2inst1.zc.com -port 50001 -parameter "SecurityTransportMode=SSL" `
通常当从 dbvizualizer 连接时,我们使用下面的 db 连接 url
BLUDB:sslConnection=true;sslTrustStoreLocation=/Users/Documents/truststore/ibm-truststore.jks;sslTrustStorePassword=;
我什至尝试如下创建文件,但同样的错误仍然存在
db2cli writecfg add -database BLUDB -host db2inst1.zc.com -port 50001
db2cli writecfg add -dsn WP -database BLUDB -host db2inst1.zc.com -port 50001
db2cli writecfg add -database BLUDB -host db2inst1.zc.com -port 50001 -parameter "SecurityTransportMode=SSL"
db2cli writecfg add -database BLUDB -host db2inst1.zc.com -port 50001 -parameter "sslTrustStoreLocation=/Users/Documents/truststore/ibm-truststore.jks"
db2cli writecfg add -database BLUDB -host db2inst1.zc.com -port 50001 -parameter "sslTrustStorePassword=<>"
实际上,我正在尝试在 Juypter Notebook 中使用 ibm_db 连接到 Db2 Warehouse,但是为此,应该对数据库进行编目,并且由于这个问题,我无法使用笔记本,而且在 mac db2 客户端上也不是支持,因此我必须使用数据服务器客户端。所以我需要帮助来实现这一目标
【问题讨论】:
SSL证书是如何管理的?您的连接是否可以访问它? clpplus 基于 JDBC,Jupyter 中的 ibm_db 可能是 Python 并且基于 ODBC。 希望您意识到 clpplus 是一个 JAVA 应用程序,而用于 python 的 ibm_db 插件(用于 juypter notebook)不使用 java,而是一个 CLI 应用程序。 JVM 和 CLI 不能使用相同的信任库。使用当前版本的 IBM 数据服务器驱动程序(高于 v10.5 fp5),如果您使用附加连接属性来指示服务器证书的完全限定路径+文件名,则不需要静态创建的密钥库。 对于 CLI 应用程序,将服务器证书导出为 ARM 格式,并在将 ARM 文件复制到工作站db2cli writecfg add -dsn $DSN_NAME -host $DB2_SERVER_HOSTNAME -port $DB2_SERVER_PORTNUMBER -parameter "SSLServerCertificate=$YOUR_ARM_FILE_FULLY_QUALIFIED_NAME"
后,在工作站上使用额外的命令行配置 db2dsdriver
db2cli validate -dsn alias -connect -user userid -passwd password
测试有效吗? ibm.com/support/knowledgecenter/en/SS6NHC/…
@data_henrik 我已经下载了 IBM 内部 CA 根证书和 IBM 内部中间 CA 证书,并创建了一个 Java 信任库并将上述证书导入到新创建的存储中。 keytool -importcert -alias IBMCA -trustcacerts -file carootcert.der -keystore ibm-truststore.jks keytool -importcert -alias IBMCAintermediate -trustcacerts -file caintermediatecert.der -keystore ibm-truststore.jks
【参考方案1】:
为了不将所有内容都作为评论,让我们开始撰写答案....
如果您想connect to Db2 Warehouse using clpplus
and using SSL,则从最新版本的 Db2 Warehouse 之一开始进行了更改。您需要像这样设置 IBM 数据服务器驱动程序配置文件:
<configuration>
<dsncollection>
<dsn alias="SSLAMPLE" name="SAMPLE" host="9.121.221.159" port="50001">
</dsn>
</dsncollection>
<databases>
<database name="SAMPLE" host="9.121.221.159" port="50001">
<parameter name="SecurityTransportMode" value="SSL"/>
</database>
</databases>
</configuration>
上面为数据库SAMPLE配置了一个别名SSLAMPLE。然后使用clpplus
连接到SSLAMPLE。
【讨论】:
感谢您的回复。我的 db2dsddriver.cfg 文件中有类似的配置以上是关于Db2 Warehouse:如何使用 SSL 与 ibm 数据服务器驱动程序进行连接的主要内容,如果未能解决你的问题,请参考以下文章
列出 DB2 Warehouse on Cloud 中的 SQL 语句历史记录