使用SSL连接的Python IBM_DB

问题描述 投票:0回答:2

我在Centos 7上使用Python,并且已经在DB2 11.3客户端上安装了GSK8Kit。

所以我设置:

IBM_DB_HOME = / path / to / my / db2client / sqllib-ODBC和clidriver

我也设置了:

LD_LIBRARY_PATH = $ IBM_DB_HOME / lib:$ LD_LIBRARY_PATH

然后我安装了ibm_db:

pip install ibm_db

我将db2servercert.arm添加到了位于/opt/IBM/db2/GSK8KitStore的mykeydb.kdb文件中,并且在客户端和服务器上使用的是相同版本的GSK8Kit。

gsk8capicmd_64 -cert -add -db mykeydb.kdb -stashed -label“ DB2服务器自签名证书” -file db2servercert.arm -format ascii -trust enable

根据此IBM文档:https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.sec.doc/doc/t0053518.html

从Db2 V10.5 FP5起,连接字符串,db2cli.ini文件,FileDSN或db2dsdriver.cfg文件中不需要SSLClientKeystoredb和SSLClientKeystash关键字。如果尚未设置或传递SSLClientKeystoreddb和SSLClientKeystash关键字的值,则CLI / ODBC客户端驱动程序将在第一个SSL连接期间在内部创建默认密钥数据库。 客户端驱动程序将调用GSKit API来创建一个填充有默认根证书的密钥数据库。

现在,我正在尝试使用各种方案为db2 SSL连接创建ibm_db连接字符串

  1. Security = ssl和SSLServerCertificate = / path / to / my / db2servercert.arm "Database=sampledb;Protocol=tcpip;Hostname=myhost;Servicename=50001;Security=ssl;SSLServerCertificate=/path/to/my/db2servercert.arm;"
  2. SECURITY = SSL和SSLClientKeystoredb = / opt / IBM / db2 / GSK8KitStore / mykeydb.kdb和SSLClientKeystash = / opt / IBM / db2 / GSK8KitStore / mystashfile.sth"Database=sampledb;Protocol=tcpip;Hostname=myhost;Servicename=50001;Security=ssl;SSLClientKeystoredb=/opt/IBM/db2/GSK8KitStore/mykeydb.kdb;SSLClientKeystash=/opt/IBM/db2/GSK8KitStore/mystashfile.sth;"
  3. Security = ssl

    "Database=sampledb;Protocol=tcpip;Hostname=myhost;Servicename=50001;Security=ssl;"

1)和2)中,我可以进行连接而没有任何SSL错误连接,但是在3)中,我收到Socket 414错误:

[IBM][CLI Driver] SQL30081N A communication error has been detected. Communication protocol being used: "SSL". 
Communication API being used: "SOCKETS". Location where the error was detected: "". 
Communication function detecting the error: "sqlccSSLSocketSetup". Protocol specific error code(s): "414", "", "". SQLSTATE=08001

表示:https://www.ibm.com/support/knowledgecenter/en/SSAL2T_7.1.0/com.ibm.cics.tx.doc/reference/r_gskit_error_codes.html

414 error: GSK_ERROR_BAD_CERT - Incorrectly formatted certificate received from partner.

注意:在具有相同配置和ibm_db的另一台机器上,此连接字符串有效(我确定我错过了smth)"Database=sampledb;Protocol=tcpip;Hostname=myhost;Servicename=50001;Security=ssl;"

我的问题是:

  1. 我必须配置哪些Env变量或db2客户机参数才能仅通过Security = ssl属性进行连接?
  2. [ibm_db在尝试连接到db2远程服务器时如何在后台工作,以及在哪里可以找到该根证书,如IBM文档所述,根证书将基于该根证书自动生成自己的keydb.kdb文件?

对于任何想法表示感谢;)

python ssl db2 db2-luw
2个回答
0
投票

如果使用的是自签名SSL证书,则必须使用选项1或2才能进行连接。

在选项1中,您直接提供了证书的公钥,以允许Db2客户端验证Db2服务器。这已经使用了您在问题2中询问的“内存中的密钥库”。

在选项2中,您应该将相同的公钥导入密钥库,以允许Db2客户端验证服务器。

如果仅使用Security=SSL进行连接,则Db2服务器的SSL证书必须来自系统密钥库中已经存在的一个CA。


0
投票

[我相信,当Db2文档写入“客户端驱动程序将调用GSKit API来创建填充有默认根证书的密钥数据库”时,这意味着动态创建的kdb将包含一些通用商业CA的证书,并且(如果指定),还将包含SSLServerCertificate指定的证书。

© www.soinside.com 2019 - 2024. All rights reserved.