使用Python OCI SDK调用DatabaseClient时遇SSL证书验证失败错误
OCI Python SDK SSL证书验证失败问题排查
问题描述
尝试使用Python的OCI模块连接Oracle OCI数据库获取备份列表,复制了同事可正常运行的代码,但自身环境运行时返回SSL错误:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)
同事无法回忆起旧代码配置细节,网上未找到针对性解释,已尝试相似问题的所有方案但未解决。
脱敏代码
import oci from oci.config import validate_config config = { "user":"myocidstring", "fingerprint":"00:00:00:00", "tenancy":"myocid", "region":"us-sanjose-1", "key_file":".\mylocalpemfile.pem", "log_requests": False } # Initialize service client with default config file database_client = oci.database.DatabaseClient(config) backup_list = database_client.list_backups(database_id = 'mydatabaseocid', limit=10) print(backup_list.data)
错误触发于backup_list = database_client.list_backups(database_id = 'mydatabaseocid', limit=10)行。
疑问:OCI API需要哪种证书?或问题由其他原因导致?
解决方案
可能原因及对应处理方式
本地CA证书缺失
OCI Python SDK默认依赖系统信任的CA证书验证服务端证书,若系统缺少OCI服务端对应的根CA(如DigiCert Global Root CA),会触发验证失败。
处理:下载官方CA证书包,在config中添加cert_bundle参数指定证书路径:config = { # 原有配置项 "cert_bundle": "/path/to/valid_cacert.pem" }PEM密钥文件路径格式错误
Windows环境下使用单反斜杠.\可能导致路径解析异常,间接引发SSL验证问题。
处理:修改路径为正斜杠或双反斜杠:"key_file": "./mylocalpemfile.pem" # 正斜杠格式 # 或 "key_file": ".\\mylocalpemfile.pem" # 双反斜杠格式网络代理/防火墙拦截
代理或防火墙可能替换SSL证书,导致SDK无法验证;同事环境可能无代理或已配置信任代理证书。
处理:检查代理设置,确保允许OCI API的HTTPS请求,且SDK能访问代理CA证书;或在无代理环境测试。OCI SDK版本不一致
你与同事的SDK版本差异可能导致证书验证逻辑不同。
处理:升级至最新版OCI SDK:pip install --upgrade oci临时跳过验证(仅限测试)
若仅需临时测试,可禁用SSL验证(生产环境禁止使用):from oci.base_client import BaseClient database_client = oci.database.DatabaseClient( config, signer=None, config={BaseClient.CONFIG_KEY_SSL_VERIFY: False} )
内容的提问来源于stack exchange,提问作者elahren
相关产品推荐
相关产品推荐

