Elasticsearch 证书问题解决

报错信息

cpp 复制代码
javax.net.ssl.SSLHandshakeException: 
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target
        at org.elasticsearch.client.RestClient.
extractAndWrapCause(RestClient.java:929) ~[elasticsearch-rest-client-8.15.5.jar:8.15.5]

javax.net.ssl.SSLHandshakeException: PKIX path building failed 是 Java 在尝试建立 SSL/TLS 连接时发生的常见问题。具体错误信息表明,客户端无法验证服务器的证书,因为它找不到从服务器证书到受信任根证书的有效证书路径(即信任链构建失败)。在你的案例中,这个错误发生在使用 Elasticsearch 的 RestClient(版本 8.15.5)连接 Elasticsearch 服务器时。

错误原因分析

  1. 服务器使用自签名证书 Elasticsearch 默认启用了安全功能(xpack.security.enabled=true),并自动生成自签名证书。这种证书未被 Java 默认信任存储(cacerts)中的根 CA(证书颁发机构)所信任,因此会导致 PKIX path building failed。

  2. 缺少中间证书或根证书 如果服务器使用的是由第三方 CA(如 Let's Encrypt、DigiCert)签发的证书,但证书链不完整(例如缺少中间证书),Java 也无法构建信任路径。

  3. 客户端信任存储未配置 Java 的默认信任存储(cacerts)不包含 Elasticsearch 自签名证书的根 CA,或者你未手动导入服务器的证书。

  4. HTTPS 配置问题 你可能尝试通过 HTTPS(https://localhost:9200)连接 Elasticsearch,但未正确配置客户端的 SSL 设置。------------------------------------------------------------

解决方法

方法 1:导入服务器证书到 Java 信任存储「推荐」

将 Elasticsearch 的自签名证书(或其根 CA 证书)导入到 Java 的 cacerts 文件中,使其被客户端信任。

获取服务器证书

  • 使用 openssl 从 Elasticsearch 服务器导出证书:

  • openssl s_client -connect ``localhost:9200`` -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > elasticsearch-cert.pem

  • 「推荐」或者从 Elasticsearch 容器中提取证书(通常位于 /usr/share/elasticsearch/config/certs/http_ca.crt):

bash 复制代码
docker cp <容器ID>:/usr/share/elasticsearch/config/certs/http_ca.crt ./http_ca.crt

导入证书到 Java 信任存储

使用 keytool 导入证书到 JDK 的 cacerts:

bash 复制代码
sudo keytool -import -trustcacerts -file http_ca.crt -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -alias elasticsearch-ca

$JAVA_HOME 是你的 JDK 安装路径,默认密码为 changeit。

提示是否信任时,输入 yes。成功了

执行出错可能是java_home不正确。文末设置java_home,

bash 复制代码
(base) andy_mac@Andy-FandeMacBook-Pro bin % 
sudo keytool -import -trustcacerts -file http_ca.crt -keystore /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/lib/security/cacerts -storepass changeit -alias elasticsearch-ca 

Password: 警告: 使用 -cacerts 选项访问 cacerts 密钥库 所有者: CN=Elasticsearch security auto-configuration HTTP CA 发布者: CN=Elasticsearch security auto-configuration HTTP CA 序列号: 2e1687fde5df9c273e369d6aaf5572ff5480b434 生效时间: Tue Apr 01 16:28:56 CST 2025, 失效时间: Fri Mar 31 16:28:56 CST 2028 证书指纹: SHA1: CD:5B:2D:C7:BA:36:9D:83:D4:49:0E:E7:0E:DA:AB:59:D6:97:84:9C SHA256: 65:3D:32:2D:E0:18:93:D5:75:CC:7D:CC:98:31:09:4D:DF:20:14:86:0E:D2:34:3A:A9:B2:C7:7E:A8:91:58:BF 签名算法名称: SHA256withRSA 主体公共密钥算法: 4096 位 RSA 密钥 版本: 3 扩展: #1: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: BF 92 96 7F D4 C9 DB 65 2B 60 5E 18 FC CE 1F CD .......e+`^..... 0010: FA DC 6E 42 ..nB ] ] #2: ObjectId: 2.5.29.19 Criticality=true BasicConstraints:[ CA:true PathLen: no limit ] #3: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: BF 92 96 7F D4 C9 DB 65 2B 60 5E 18 FC CE 1F CD .......e+`^..... 0010: FA DC 6E 42 ..nB ] ] 
是否信任此证书? [否]: y 
证书已添加到密钥库中

验证 重启应用,检查是否仍报错





1-检查 $JAVA_HOME 是否正确设置

验证 $JAVA_HOME在终端运行:

echo $JAVA_HOME

如果输出为空或路径不正确(例如不是 JDK 安装目录),需要设置正确的 $JAVA_HOME。

2-查找 JDK 路径(macOS) 在 macOS 上,JDK 通常安装在

/Library/Java/JavaVirtualMachines/ 下。运行以下命令查找:

/usr/libexec/java_home

(base) andy_mac@Andy-FandeMacBook-Pro bin % /usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home

--我的mac

3-设置 $JAVA_HOME如果未设置或不正确,临时设置:

export JAVA_HOME=$(/usr/libexec/java_home)

或者永久设置【推荐】,编辑 ~/.zshrc(或 ~/.bashrc,取决于你的 shell):

echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> ~/.zshrc

source ~/.zshrc

4-验证路径确认 cacerts 文件是否存在:

ls $JAVA_HOME/lib/security/cacerts

如果文件存在,路径正确;否则继续排查 JDK 安装。 /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/lib/security/cacerts

相关推荐
isNotNullX30 分钟前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析
小袁拒绝摆烂40 分钟前
ElasticSearch快速入门-1
大数据·elasticsearch·搜索引擎
点控云2 小时前
智能私域运营中枢:从客户视角看 SCRM 的体验革新与价值重构
大数据·人工智能·科技·重构·外呼系统·呼叫中心
zkmall3 小时前
企业电商解决方案哪家好?ZKmall模块商城全渠道支持 + 定制化服务更省心
大数据·运维·重构·架构·开源
绝不偷吃5 小时前
ELK日志分析系统
运维·elk·jenkins
随缘而动,随遇而安7 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
GISer_Jing8 小时前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
IT_10249 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
一只鹿鹿鹿11 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
聚铭网络11 小时前
案例精选 | 某省级税务局AI大数据日志审计中台应用实践
大数据·人工智能·web安全