自托管Elasticsearch访问提示证书不受信任但已配置SSL证书如何解决
问题根因
你的判断正确,服务端SSL证书确实已经正常加载。出现证书不信任报错的核心原因是:当前Elasticsearch使用的是首次启动安全自动配置流程生成的私有自签名CA签发的证书,该CA根证书不在浏览器、操作系统、业务客户端的默认受信任根证书列表中,因此所有默认开启证书校验的访问端都会主动拦截请求,和证书本身是否加载成功无关。
额外注意:从你贴出的证书返回结果看,当前HTTP层使用的服务端证书(subject_dn为CN=05eeab4fdxxx)有效期到2024-06-26,如果当前日期已经超过该时间,即使完成信任配置也会报证书过期错误,需要先重新签发证书。
解决方案
根据使用场景可以选择临时调试方案或者永久正规方案。
方案1:临时调试快速处理(不推荐生产环境使用)
直接在客户端侧关闭证书校验逻辑,适合本地短时间调试:
- 浏览器访问:Safari弹出证书不可信提示时,点击「显示详细信息」-「访问此网站」,输入系统密码确认将该证书加入本地信任列表即可;Chrome、Edge等浏览器可在报错页的高级选项中选择继续访问,同步信任证书即可。
- 代码客户端调用:在客户端初始化配置中添加跳过证书校验的参数,例如Python Elasticsearch客户端初始化时传入
verify_certs=False,Java客户端配置自定义SSLContext关闭证书校验即可。
你当前使用Postman开启「允许无效证书」选项能正常访问,就是走的这个逻辑,本质是客户端主动放弃证书合法性校验。
方案2:永久解决(生产/长期使用推荐)
核心逻辑是让所有访问端信任Elasticsearch使用的CA根证书,或者替换为访问端默认信任的证书。
方式A:信任Elasticsearch自带的自签名CA
- 导出CA根证书
登录Elasticsearch部署节点,进入ES配置目录(默认路径为安装目录下的config/certs/,包管理器安装的路径一般为/etc/elasticsearch/certs/),先执行命令获取http.p12证书库的密码:
拿到密码后,用openssl从./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_passwordhttp.p12中导出CA根证书为PEM格式:
导出得到的openssl pkcs12 -in config/certs/http.p12 -nokeys -cacerts -out es_http_ca.crtes_http_ca.crt就是需要被信任的根证书文件。 - 在访问端导入信任证书
- Mac端(适配Safari、Chrome等使用系统证书存储的浏览器):双击导出的crt文件,自动打开钥匙串访问工具,找到导入的名为
Elasticsearch security auto-configuration HTTP CA的证书,右键选择「显示简介」,打开「信任」分类,将「使用此证书时」选项修改为「始终信任」,输入系统密码保存后即可正常访问。 - Windows端:双击crt文件选择「安装证书」,存储位置选择「本地计算机」,证书存储位置指定为「受信任的根证书颁发机构」,导入完成后重启浏览器即可生效。
- 代码客户端:不要关闭证书校验,直接将导出的
es_http_ca.crt作为CA根证书路径传入客户端配置即可,例如Python客户端传入参数ca_certs="./es_http_ca.crt",Java客户端可将证书导入JDK的cacerts信任库。
- Mac端(适配Safari、Chrome等使用系统证书存储的浏览器):双击导出的crt文件,自动打开钥匙串访问工具,找到导入的名为
方式B:替换为自定义可信证书
如果你有内部私有CA,或者可以申请公共可信SSL证书,可以直接替换Elasticsearch的HTTP层证书,一劳永逸解决信任问题:
- 将证书私钥、服务端证书、CA链文件上传到Elasticsearch节点的certs目录下
- 修改
elasticsearch.yml中的HTTP SSL配置,注释掉原有p12证书库的配置,替换为新的证书路径:xpack.security.http.ssl.enabled: true xpack.security.http.ssl.key: certs/your_access_domain.key xpack.security.http.ssl.certificate: certs/your_access_domain.crt xpack.security.http.ssl.certificate_authorities: certs/your_ca_chain.crt # 清空原有PKCS12证书库配置 xpack.security.http.ssl.keystore.path: "" - 重启Elasticsearch服务即可,注意确保证书的SAN扩展列表包含你实际访问用的域名/IP,否则会触发域名不匹配报错。
内容的提问来源于stack exchange,提问作者Xavi Font
相关产品推荐
相关产品推荐

