【发布时间】:2020-02-03 20:23:51
【问题描述】:
我在 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 安装 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 连接字符串:
-
Security=ssl 和 SSLServerCertificate=/path/to/my/db2servercert.arm
"Database=sampledb;Protocol=tcpip;Hostname=myhost;Servicename=50001;Security=ssl;SSLServerCertificate=/path/to/my/db2servercert.arm;" -
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;" -
安全=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
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;"
我的问题是:
- 我必须配置哪些环境变量或 db2 客户端参数才能仅使用 Security=ssl 属性进行连接?
- 在尝试连接到 db2 远程服务器时,ibm_db 如何在后台工作?我可以在哪里找到这个根证书,它会根据它自动生成自己的 keydb.kdb 文件,如 IBM 文档中所述?
感谢任何想法;)
【问题讨论】:
-
与这个问题并不真正相关......但在我的情况下,如果我保留 Security=ssl 但根本没有指定证书,它会起作用。我猜这个证书是默认的。