Elasticsearch 8.x 默认开启安全配置,RAG 应用连接报错通常是因为客户端不信任服务端自签名证书。生产环境建议将服务端生成的 http_ca.crt 配置到客户端,开发环境可临时关闭验证但存在安全风险。
先说结论:ES 8.x 强制启用 TLS,连接失败需明确选择信任 CA 或关闭验证,生产环境必须信任 CA。
- 适合:使用 LangChain、LlamaIndex 或原生客户端连接 ES 8.x 集群的场景
- 先准备:从 ES 服务器获取 http_ca.crt 文件或使用自定义证书
- 验收:客户端能成功执行 search 请求且无 SSL 警告
命令速用版
from elasticsearch import Elasticsearch
es = Elasticsearch(
"https://localhost:9200",
ca_certs="/path/to/http_ca.crt",
basic_auth=("elastic", "password")
)为什么会这样
Elasticsearch 8.x 版本启动时默认生成自签名证书并启用 SSL/TLS 加密。
RAG 应用所在的客户端环境通常没有将 ES 生成的自签名 CA 加入系统信任 store,导致 SSL 握手阶段验证失败。这不是网络不通,而是身份信任链缺失。
分步处理
步骤 1:获取 CA 证书
在 Elasticsearch 服务器安装目录下找到 http_ca.crt 文件,默认路径通常在 config/certs/ 或启动日志中打印的路径。
步骤 2:传输证书
将 http_ca.crt 安全复制到运行 RAG 应用的服务器或容器内,确保证书文件权限受限。
步骤 3:配置客户端
在初始化 Elasticsearch 客户端时,指定 ca_certs 参数指向该证书文件路径。
步骤 4:临时绕过(仅开发)
若无法获取证书,可在客户端配置中设置 verify_certs=False,但禁止在生产环境使用。
怎么验证是否生效
执行客户端 info 或 search 方法,观察是否抛出 SSLError 异常。
print(es.info())若返回集群版本信息且无证书警告,表示配置生效。
常见坑
- 证书路径填写错误,客户端读取不到文件导致报错
- ES 重启后自签名证书可能变更,需重新同步 CA 证书
- 容器化部署时忘记将 CA 证书挂载到容器内部
常见问题
问题
找不到 http_ca.crt 文件怎么办?
答案
查看 Elasticsearch 启动日志,初始启动时会打印 CA 证书生成路径。
问题
生产环境可以关闭 SSL 验证吗?
答案
不可以,关闭验证会导致通信被窃听或篡改,必须配置正式证书或信任自签名 CA。
参考来源
- Elastic 官方文档 - Secure cluster connections: https://www.elastic.co/guide/en/elasticsearch/reference/current/security-feature.html
- Elastic 官方文档 - Connecting to Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/connecting.html