Python 使用带有SSL的ibm_db连接到DB2时出错

Python 使用带有SSL的ibm_db连接到DB2时出错,python,ssl,db2,Python,Ssl,Db2,我试图使用带有SSL的python模块ibm_db连接到DB2,我得到以下错误 conn = ibm_db.connect("DATABASE=myDB;HOSTNAME=xx.xx.xxx.xxx;PORT=nnn;PROTOCOL=TCPIP;SECURITY=SSL;SSLServerCertificate=./myFile.arm;UID=<username>;PWD=<password>;","","") stmt = ibm_db.exec_immediat

我试图使用带有SSL的python模块ibm_db连接到DB2,我得到以下错误

 conn = ibm_db.connect("DATABASE=myDB;HOSTNAME=xx.xx.xxx.xxx;PORT=nnn;PROTOCOL=TCPIP;SECURITY=SSL;SSLServerCertificate=./myFile.arm;UID=<username>;PWD=<password>;","","")
stmt = ibm_db.exec_immediate(conn, "delete from myschema.mytable")
我花了几个小时试着调试。这里没有任何进展


非常感谢您的帮助。

我建议您调查一下SSL/TLS通信是如何配置的,证书是如何管理的

SSL特定错误为。你可能已经查过了。错误代码的输入。

Tinniam

您的gskit密钥库(即kdb)和隐藏文件(即sth文件-存储密钥库加密密码的文件)是如何创建的? 它是在客户端计算机上使用相同版本在本地创建的,还是由其他具有不同版本gskit的计算机上的人创建的

存在已知的gskit不兼容问题()。较低版本无法读取使用版本GSKit 8.0.50.69和更新版本生成的隐藏文件,它将准确返回GSKit 414错误

检查gskit,了解创建密钥库和存储文件的位置以及客户端正在使用的版本。sqllib/gskit/bin中有一个gsk8ver_64工具来告诉您版本

如果确实遇到了不兼容问题,则需要升级客户机以使用在较新的boundary发行版上具有gskit的Db2版本,或者:查找较旧版本的Db2服务器,如10.5 fp9,并使用较低版本的gskit生成新的密钥库和存储文件

注意:较新版本的gskit可以读取较低版本创建的隐藏。但是由8.0.50.69和更新版本创建的隐藏文件对于低于8.0.50.69版本的gskit版本是不可读的

希望这有助于解决您的问题

凯文·西


Db2混合云安全团队

我今天在打开从Db2客户端到Db2服务器的SSL连接时遇到了同样的问题。 SQL30081N,错误代码为414。Db2文档指出了这一点,提示是 414–从合作伙伴处收到的证书格式不正确

我们后来发现,我们刚刚将服务器的公钥导入到客户机信任密钥环中。正确的方法是仅将根服务器和中间服务器的公钥导入客户端信任存储。您不需要将服务器公钥(由中间服务器签名)导入客户端信任存储


我希望,原始海报已经找到了解决方案,我只想把我的解决方案留给下一个有同样问题的人。

Db2是否配置为接受SSL连接?诊断日志中有任何内容吗?不要在arm文件名中使用相对路径名。改为使用绝对路径(完全限定路径名)。我也尝试了绝对路径。给出了相同的错误。另外,当我检查414错误时,它显示“从合作伙伴处收到的证书格式不正确”。这似乎曾经奏效。然后它停止工作是的,它被配置为SSL。我能够使用Pysparkgsk rc=414-坏证书连接SSL。
   Exception: [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 SQLCODE=-30081