Python - Jaydebeapi/jpype - 使用 SSL 加密连接到 as400/db2



我正在努力(从几天开始(通过 SSL 连接到 AS400 上的 DB2 数据库。 对于使用 jaydebeapi 的数据库连接 im 并使用安全连接访问数据库,我需要通过 jpype 函数将 trustStore 位置和 trustStore 密码附加到 JVM。 以下是我到目前为止所做的截图:

import jaydebeapi
import os
import jpype
import pandas as pd
from credentials_getter import get_db2_credentials

class i5Connection:
def __init__(self, user, password):
if jpype.isJVMStarted():
print("already started!")
filepath_script = os.path.dirname(os.path.abspath(__file__))
ssl_trust_store_location = filepath_script + "/database/java-certs.jks"
jar = filepath_script + '/database/jt400.jar'
jvm_path = jpype.getDefaultJVMPath()
jpype.startJVM(jvm_path,
'-Djava.class.path=%s' % jar,
'-Djavax.net.ssl.trustStore=%s' % ssl_trust_store_location +
'-Djavax.net.ssl.trustStorePassword=pw')
connection_string = 'jdbc:as400://172.17.0.1/library'
print(connection_string)
self.conn = jaydebeapi.connect('com.ibm.as400.access.AS400JDBCDriver',
connection_string,
{'user': user,
'password': password,
'secure': 'true'},
filepath_script + '/database/jt400.jar')

现在我遇到了以下错误消息:

jpype._jexception.java.sql.SQLExceptionPyRaisable: java.sql.SQLException: The application requester cannot establish the connection. (PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target)

如果我从 startJVM 调用中删除 trustStoreLocation、密码和 jaydebeapi 调用的安全参数,它可以工作(不加密( 谁能告诉我我做错了什么?是否有我还没有找到的好的 IBM 文档?

编辑:我找到了一个解决方法:我只是通过keytool手动将证书保存到cacert:如何将现有的Java密钥库(.jks(文件导入Java安装中? 不是真正的解决方案,但如果有人也被困住了,希望会有所帮助......

这不是JayDeBeApi解决方案,但我能够在Mac和Windows上使用Python连接到HANA,并使用加密连接使用此解决方案。

最新更新