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

相关推荐
你觉得20513 分钟前
浙江大学朱霖潮研究员:《人工智能重塑科学与工程研究》以蛋白质结构预测为例|附PPT下载方法
大数据·人工智能·机器学习·ai·云计算·aigc·powerpoint
益莱储中国28 分钟前
世界通信大会、嵌入式展及慕尼黑上海光博会亮点回顾
大数据
Loving_enjoy1 小时前
基于Hadoop的明星社交媒体影响力数据挖掘平台:设计与实现
大数据·hadoop·数据挖掘
浮尘笔记1 小时前
go-zero使用elasticsearch踩坑记:时间存储和展示问题
大数据·elasticsearch·golang·go
碳基学AI3 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
unhurried人生——冕临3 小时前
Ubuntu安装Elasticsearch
elasticsearch
一个天蝎座 白勺 程序猿3 小时前
大数据(4.6)Hive执行引擎选型终极指南:MapReduce/Tez/Spark性能实测×万亿级数据资源配置公式
大数据·hive·mapreduce
HelpHelp同学4 小时前
信息混乱难查找?三步搭建高效帮助中心解决难题
大数据·人工智能·知识库管理系统
TDengine (老段)10 小时前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
这个懒人12 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog