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 -t​​rustcacerts -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 文件中有类似的配置 配置> 我尝试使用 clpplus 连接导致再次出现以下错误 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:无法找到请求目标的有效证书路径。 ERRORCODE=-4499,SQLSTATE=08001

以上是关于Db2 Warehouse:如何使用 SSL 与 ibm 数据服务器驱动程序进行连接的主要内容,如果未能解决你的问题,请参考以下文章

列出 DB2 Warehouse on Cloud 中的 SQL 语句历史记录

启用与 LDAP 服务器的 SSL 通信

通过SSL将IBM DB2 JDBC连接到编目数据库

如何将 Python 连接到 Db2

如何将带有 SVG 的 div#WareHouse 转换为图像

Data WareHouse RedShift 与其他 RDBM