Elasticsearch 证书问题解决
报错信息
javax.net.ssl.SSLHandshakeException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested targetat 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 服务器时。
错误原因分析
-
服务器使用自签名证书 Elasticsearch 默认启用了安全功能(xpack.security.enabled=true),并自动生成自签名证书。这种证书未被 Java 默认信任存储(cacerts)中的根 CA(证书颁发机构)所信任,因此会导致 PKIX path building failed。
-
缺少中间证书或根证书 如果服务器使用的是由第三方 CA(如 Let’s Encrypt、DigiCert)签发的证书,但证书链不完整(例如缺少中间证书),Java 也无法构建信任路径。
-
客户端信任存储未配置 Java 的默认信任存储(cacerts)不包含 Elasticsearch 自签名证书的根 CA,或者你未手动导入服务器的证书。
-
HTTPS 配置问题 你可能尝试通过 HTTPS(https://localhost:9200)连接 Elasticsearch,但未正确配置客户端的 SSL 设置。------------------------------------------------------------
解决方法
方法 1:导入服务器证书到 Java 信任存储「推荐」
将 Elasticsearch 的自签名证书(或其根 CA 证书)导入到 Java 的 cacerts 文件中,使其被客户端信任。
获取服务器证书
-
使用 openssl 从 Elasticsearch 服务器导出证书:
-
openssl s_client -connectlocalhost:9200-showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > elasticsearch-cert.pem -
「推荐」或者从 Elasticsearch 容器中提取证书(通常位于 /usr/share/elasticsearch/config/certs/http_ca.crt):
-
docker cp <容器ID>:/usr/share/elasticsearch/config/certs/http_ca.crt ./http_ca.crt

导入证书到 Java 信任存储
使用 keytool 导入证书到 JDK 的 cacerts:
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,
(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
相关文章:
Elasticsearch 证书问题解决
报错信息 javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat org.elasticsearch.client.RestClient. extractAndWrapCause(R…...
I²C总线高级特性与故障处理分析
IC总线高级特性与故障处理深度分析 目录 1. IC基础回顾 1.1 IC通信基本原理1.2 IC总线时序与协议1.3 寻址方式与读写操作 2. IC高级特性 2.1 多主机模式2.2 时钟同步与伸展2.3 高速模式与Fast-mode Plus2.4 10位寻址扩展 3. IC总线故障与锁死 3.1 断电锁死原理3.2 总线挂起与…...
山东大学《多核平台下的并行计算》实验笔记
每年的题目都不一样,学弟学妹参考参考就行。 一、搭建linux环境 主播用的ssh+虚拟机,目前用着最顺手的 二、安装并行编程软件 MPI(Message Passing Interface),由其字面意思也可些许看出,是一个信息传递接口。可以理解为是一种独立于语言的信息传递标准。而OpenMPI和MP…...
2023年CIE SCI1区TOP:序列融合麻雀搜索算法ISSA,深度解析+性能实测
目录 1.摘要2.麻雀搜索算法SSA原理3.改进策略3.结果展示4.参考文献5.代码获取 1.摘要 麻雀搜索算法(SSA)是一种基于麻雀觅食和防捕行为的群体智能算法。然而,基本SSA在迭代过程中,种群多样性逐渐降低,容易陷入局部最优…...
elasticsearch 如果按照日期进行筛选
如果你需要按照日期进行筛选,你可以使用 Elasticsearch 的范围查询来实现。以下是一个示例代码,演示如何在 Java 中进行日期范围查询: import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticse…...
SpringBoot条件装配注解
SpringBoot条件装配注解 Spring Boot 提供了一系列条件装配注解,用于控制 Bean 的创建和装配过程。以下是一些常用的条件装配注解及其详细介绍: ConditionalOnClass 作用:当类路径中存在指定的类时,才会创建该 Bean。 示例&#…...
配置晟腾910b的PyTorch torch_npu环境
1.【新教程】华为昇腾NPU的pytorch环境搭建 - Lukea - 博客园 1、新建conda环境。 conda create -n pytorch python3.102、在新建好的conda环境中,安装基础的依赖。 pip install attrs cython numpy1.24.0 decorator sympy cffi pyyaml pathlib2 psutil protobuf…...
算法刷题记录——LeetCode篇(3.10) [第291~300题](持续更新)
更新时间:2025-04-02 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 295. 数据流的中位数 中位数是…...
conda 激活环境vscode的Bash窗口
多份conda环境注意事项,当时安装了两个conda环境,miniconda和conda,导致环境总是冲突矛盾。初始化时需要更加注意。 $ C:/Users/a_hal/miniconda3/Scripts/conda.exe init bash能够显示用哪里的conda环境命令执行。 然后直接conda activate…...
网线和跳线
文章目录 一、网线二、跳线三、区别对比一句话总结 一、网线 网线(网路线): 它是一种用来连接网络设备的线,比如: 把 电脑连到交换机把 路由器连到光猫把 交换机和交换机连接起来 它的本质是:传输网络信…...
火山 RTC 引擎 2 ----APPKEY
前篇文章:火山RTC引擎 --一次失望的体验 那个DEMO可以编译运行了,但是功能不能用, 一用就崩溃。 主要原因还是没有APPKEY 一、火山引擎 APPKEY 管理 1、登录后台 账号登录-火山引擎欢迎登录火山引擎,火山引擎是字节跳动旗下的云…...
Linux中进程与计划任务
目录 一.进程 1.进程相关概念 2.进程的特征 3.进程相关的命令 3.1 ps命令 3.2 top命令 3.3 pgrep命令 3.4 pstree命令进程树 3.5 kill命令 二.计划任务 1.一次性任务 2.周期性任务crontab 三.本章涉及面试题 1.运维需要关注服务器的系统性能及如何查看 一.进程 1…...
Springboot学习笔记3.28
目录 实战第六课:文章分类开发 新增文章分类: 具体实现: 查询文章分类: 具体实现: 获取文章分类的详情 更新文章分类: 注意点: 编辑 对校验规则进行分组: 学习时的疑惑…...
【CSS3】05-定位 + 修饰属性
本文介绍定位和CSS中的修饰属性。 目录 1. 定位 1.1 相对定位 1.2 绝对定位 1.3 定位居中 1.4 固定定位 1.5 z-index堆叠层级 2. 修饰属性 2.1 垂直对齐方式 vertical-align 2.2 过渡属性 2.3 透明度 opacity 2.4 光标类型 cursor 1. 定位 灵活改变盒子在网页中的位…...
C 语言测验
C 语言测验 引言 C 语言作为一种历史悠久且广泛使用的编程语言,自1972年由Dennis Ritchie在贝尔实验室发明以来,一直是计算机科学领域的基石。C 语言以其高效、灵活、可移植的特点,在操作系统、嵌入式系统、游戏开发等多个领域占据着重要地位。为了帮助读者深入了解C语言,…...
如何屏蔽mac电脑更新提醒,禁止系统更新
最烦mac的系统更新提醒了,过几天就是更新弹窗提醒,现在可以直接禁掉了,眼不见心不乱,不然一升级,开发环境全都不能用了,那才是最可怕的,屏蔽的方法也很简单,就是屏蔽mac系统更新的请…...
tcp的粘包拆包问题,如何解决?
TCP的粘包和拆包问题是由于TCP协议面向流的特性导致数据边界不明确,解决方案需在应用层明确数据包边界。以下是具体解决方法: 1. 固定长度消息(Fixed-Length Protocol) 实现方式:每个数据包长度固定,不足…...
Rclone同步Linux数据到google云盘
文章目录 Rclone管理云存储Rclone安装和使用说明安装rclone配置rclone连接到云盘基本备份命令高级备份选项自动化备份加密备份(可选)恢复数据常见云存储服务名称注意事项 googleCloud 平台中操作OAuth权限请求页面(OAuth同意屏幕)…...
AI人工智能-Jupyter NotbookPycharm:Py开发
安装 命令: pip install jupyter 启动 命令: jupyter notebook 启动成功后,下面网址会默认自动打开当前用户的根目录。 其实这个页面显示的内容,是我们电脑目录C:\Users\当前用户\下的文件夹 我们平常做实验,希望在…...
DDR简介
一、什么是DDR? DDR SDRAM(Double Data Rate Synchronous DYNAMIC RAM)中文名是:双倍数据速率同步动态随机存储器。 传统的SDRAM只在时钟信号的上升沿传输数据,而DDR可以同时在时钟的上升沿和下降沿传输数据…...
Kubernetes 入门篇之 Node 安装与部署
上篇记录了Master节点的安装与部署,本篇记录一下node的安装与部署。 1. 基础环境配置 关闭防火墙与交换分区(swap),关闭selinux,配置yum源参考上篇;启用 IPv4 数据包转发 和 iptables 网络过滤参考上篇&a…...
企业数据治理实践:“七剑” 合璧,释放数据价值
在数字化转型的浪潮中,数据已成为企业的核心资产,其治理水平直接关乎企业的竞争力和可持续发展能力。数据模型治理、元数据治理、数据质量治理、数据标准治理、主数据治理、数据安全治理以及数据服务平台治理,共同构成了企业数据治理的关键体…...
VRRP(虚拟路由器冗余协议)、虚拟路由器、master路由器、backup路由器
VRRP(虚拟路由器冗余协议) 1、介绍 虚拟路由冗余协议 VRRP (Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时,VRRP机制能够选举…...
基本元素定位(findElement方法)
通过ID定位:使用元素的ID属性进行定位,是最简单和最常用的方法,因为ID在页面上是唯一的。 //定位百度的搜索框元素,并且输入数据(ID定位)-唯一 chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂")…...
多模态RAG实践:如何高效对齐不同模态的Embedding空间?
目录 多模态RAG实践:如何高效对齐不同模态的Embedding空间? 一、为什么需要对齐Embedding空间? 二、常见的对齐方法与关键技术点 (一)对比学习(Contrastive Learning) (二&#…...
Cesium 核心思想及基础概念应用
文章目录 Cesium 基础理解(一)1. 场景(Scene)2. 查看器(Viewer)3. 相机(Camera)4. 实体(Entity)5. 图元(Primitive)6. 数据加载与解析…...
vue中的 拖拽
拖拽总结 实现方式特点适用场景HTML5 原生拖拽 API✅ 直接使用 dataTransfer 进行数据传输 ✅ 兼容性好(大部分浏览器支持) ✅ 适合简单的拖拽场景低代码平台、表单生成器、组件拖拽Vue/React 组件库(如 Vue Draggable、SortableJSÿ…...
Linux进程间通信(1)
1.IPC 1.什么是IPC? Inter Process Communication 2.进程间通信常用的几种方式 1,管道通信:有名管道,无名管道 2,信号- 系统开销小 3,消息队列-内核的链表 4,信号量-计数器 5,共享…...
Scala相关知识学习总结3
包 - 包声明:和Java类似,作用是区分同名类、管理类命名空间。Scala包名只能含数字、字母等,不能数字开头、不能用关键字。 - 包说明:有类似Java的包管理风格,也有独特嵌套风格。嵌套风格有两个特点,一是&…...
Opencv计算机视觉编程攻略-第七节 提取直线、轮廓和区域
第七节 提取直线、轮廓和区域 1.用Canny 算子检测图像轮廓2.用霍夫变换检测直线;3.点集的直线拟合4.提取连续区域5.计算区域的形状描述子 图像的边缘区域勾画出了图像含有重要的视觉信息。正因如此,边缘可应用于目标识别等领域。但是简单的二值边缘分布图…...
