我正在尝试使用带有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")
我收到以下异常
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
我花了几个小时尝试调试。在这里无法取得任何进展
任何帮助将不胜感激。
答案 0 :(得分:1)
丁尼亚姆
如何创建您的gskit密钥库(即.kdb)和隐藏文件(即.sth文件-存储密钥库加密密码的文件)? 是在客户端计算机上以相同版本在本地创建的,还是由其他计算机上具有gskit版本的其他人创建的?
存在一个已知的gskit不兼容问题(http://www-01.ibm.com/support/docview.wss?uid=swg22014693)。由GSKit 8.0.50.69版和更高版本生成的存储文件无法由较低版本读取,它将完全返回gskit 414错误。
检查有关创建密钥库和存储文件的gskit以及客户端使用的版本。 sqllib / gskit / bin中有一个gsk8ver_64工具可以告诉您版本。
如果确实遇到了不兼容问题,则需要升级客户端以使用在较新的边界发行版上具有gskit的Db2版本,或者:查找较旧的Db2服务器版本(例如10.5 fp9)并生成一个较低版本的gskit的新密钥库和存储文件。
注意:较新版本的gskit可以读取较低版本创建的存储。但是低于8.0.50.69发行版的gskit版本无法读取由8.0.50.69和更高版本创建的隐藏文件。
希望这可以帮助您解决问题。
凯文(Kevin See)
Db2混合云安全团队
答案 1 :(得分:0)
我建议调查SSL / TLS通信的配置方式,证书的管理方式。
特定于SSL的错误为documented as GSKit issue related to certificates。您可能已经检查了recommendations for the error SQL30081N。 error SQL30081N even has protocol-specific details表示错误代码。
答案 2 :(得分:0)
我今天在打开从Db2客户端到Db2服务器的SSL连接时遇到了同样的问题。 SQL30081N,错误代码为414。DB2文档指向此https://www.ibm.com/support/knowledgecenter/en/SSVJJU_6.3.0/com.ibm.IBMDS.doc/progref506.htm,提示为 414 –从合作伙伴处收到的格式不正确的证书。
我们后来发现,我们刚刚将服务器的公共密钥导入了客户端信任密钥环。正确的方法是仅将根服务器和中间服务器的公共密钥导入客户端信任存储。您不需要将服务器公共密钥(由中间服务器签名)导入到客户端信任存储中。
我希望原始张贴者已经找到了解决方案,而我只想将我的解决方案留给有同样问题的下一个人使用。