OpenSearch 2.0.1 Python客户端连接报SSL证书验证失败错误
问题根因
SSL证书校验失败的核心原因是Python客户端配置的信任CA证书路径错误:
你代码中ca_certs_path填写的是服务端节点证书/etc/opensearch/cert.pem,但客户端校验服务端证书合法性时,需要的是签发该证书的根CA/完整信任链文件,也就是你opensearch.yml中配置的/etc/opensearch/fullchain.pem。
OpenSearch Dashboard能正常连接,是因为它的配置中正确引用了信任链文件,和你Python代码里填的证书文件不是同一个,所以不会报错。
修复步骤
- 修正CA证书路径配置
将代码中CA路径修改为完整证书链路径:
ca_certs_path = '/etc/opensearch/fullchain.pem'
- 校验证书文件读取权限
确认运行Python脚本的用户对该证书文件有读权限,可执行以下命令检查:
ls -l /etc/opensearch/fullchain.pem
如果返回的权限位没有全局读权限,测试环境可直接执行以下命令添加权限:
chmod 644 /etc/opensearch/fullchain.pem
- 跳过代码直接验证证书链有效性
在运行脚本的服务器上执行openssl命令,直接验证服务端返回的证书是否能被指定CA信任,排除代码逻辑干扰:
openssl s_client -connect 10.83.5.67:9200 -CAfile /etc/opensearch/fullchain.pem
如果返回结果末尾显示Verify return code: 0 (ok),说明证书链校验正常,此时再运行Python代码即可正常连接。
- 临时调试方案(仅测试环境可用,生产环境禁止)
如果只是临时验证功能,不想排查证书问题,可以直接关闭证书校验快速连通:
client = OpenSearch( hosts = [{'host': host, 'port': port}], http_compress = True, http_auth = auth, use_ssl = True, verify_certs = False, ssl_assert_hostname = False, ssl_show_warn = False )
兼容问题提示
你当前使用的Python 3.6已停止官方维护,高版本opensearchpy在Python 3.6环境下存在SSL参数传递的已知bug,如果修正CA路径后仍然报错,可以将opensearchpy降级到和OpenSearch版本匹配的2.0.0版本:
pip3 install opensearchpy==2.0.0
内容的提问来源于stack exchange,提问作者Avnish Singh
相关产品推荐
相关产品推荐

