使用Python HDBCLI连接SAP HANA时遇X.509证书错误求助
问题重现
你的代码:
from hdbcli import dbapi import json with open('./configure.json') as config_file: config = json.load(config_file) address = config["host"] port = config["port"] username = config["user"] password = config["password"] print(address, port, username, password) connection = dbapi.connect( address=address, port=port, username=username, password=password, ) cursor = connection.cursor()
错误信息:
F:\Scripts\venv\Scripts\python.exe F:\Scripts\main.py
172.17.0.44 30115 XXXXXX XXXXXX_2017
Traceback (most recent call last):
File "F:\Scripts\main.py", line 13, in
connection = dbapi.connect(
hdbcli.dbapi.Error: (-10709, 'Connection failed (RTE:[-1] X.509: No key store or PEM provided (0.0.0.0:10976 -> 172.17.0.44:30115))')Process finished with exit code 1
解决方案
这个错误是因为SAP HANA服务器要求SSL/TLS加密连接,但你的客户端未提供信任的证书文件。针对Windows 11环境,按以下步骤处理:
获取服务器根证书:联系SAP HANA管理员获取服务器的根CA证书(.pem格式)。如果没有管理员支持,可通过OpenSSL导出(先安装OpenSSL,用Git Bash或WSL执行):
openssl s_client -connect 172.17.0.44:30115 < NUL | openssl x509 -outform PEM > hana_root_ca.pem修改连接代码指定证书:在
dbapi.connect()中添加sslTrustStore参数,指向证书文件路径:connection = dbapi.connect( address=address, port=port, username=username, password=password, sslTrustStore="F:/Scripts/hana_root_ca.pem" # 替换为你的证书实际路径 )测试环境临时方案:若为测试环境,可临时关闭证书验证(生产环境禁用此操作):
connection = dbapi.connect( address=address, port=port, username=username, password=password, sslValidateCertificate=False )检查端口配置:确认30115是服务器的SSL端口(HANA默认SSL端口为30115,非SSL为30113),若服务器未启用SSL,尝试切换到非SSL端口连接。
内容的提问来源于stack exchange,提问作者kaige

