gpt4 book ai didi

使用 SSL 连接的 Python IBM_DB

转载 作者:行者123 更新时间:2023-12-04 22:43:39 43 4
gpt4 key购买 nike

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

所以我设置:

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



我也设置:

LD_LIBRARY_PATH = $IBM_DB_HOME/lib:$LD_LIBRARY_PATH



然后我安装了 ibm_db:

pip install ibm_db



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

gsk8capicmd_64 -cert -add -db mykeydb.kdb -stashed -label "DB2 Server self-signed certificate" -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 连接期间在内部创建默认 key 数据库。 客户端驱动程序将调用 GSKit API 来创建一个填充有默认根证书的 key 数据库。

现在我正在尝试创建 ibm_db 连接字符串 对于使用各种场景的 db2 SSL 连接:
  • 安全性=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

    这意味着:
    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;"
    我的问题是:
  • 我必须配置哪些环境变量或 db2 客户端参数才能仅使用 Security=ssl 属性进行连接?
  • ibm_db 在尝试连接到 db2 远程服务器时如何在后台工作,并且我可以在哪里找到这个根证书,根据它自动生成自己的 keydb.kdb 文件,如 IBM 文档中所述?

  • 感谢任何想法;)

    最佳答案

    如果您使用的是自签名 SSL 证书,则在不使用选项 1 或 2 的情况下将无法连接。

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

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

    如果您只想使用 Security=SSL 进行连接,您的 Db2 服务器的 SSL 证书需要来自系统 keystore 中已有的 CA 之一。

    关于使用 SSL 连接的 Python IBM_DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60046628/

    43 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com