springboot3.3.5 集成elasticsearch8.12.2 ssl 通过 SSL bundle name 来实现

看到你在 Spring Boot 3.3.5 中配置 Elasticsearch 时遇到了 SSL bundle name 'es-ssl-bundle' cannot be found 的错误。这个问题通常是因为你在配置中指定了一个名为 es-ssl-bundle 的 SSL 捆绑包,但 Spring Boot 在它的上下文中并没有找到这个定义好的捆绑包

简单来说,就是你告诉程序要用一个叫"es-ssl-bundle"的安全证书包,但是这个包要么还没创建,要么名字没对应上。

🔧 解决方案:配置 SSL Bundle

Spring Boot 3 引入了 SSL Bundles 的概念,它允许你集中管理 SSL 配置 ,包括信任材料(如证书、私钥)和各种 SSL 选项。你需要通过 application.yml (或 application.properties )明确定义一个名为 es-ssl-bundle 的 SSL 捆绑包,并指定证书的路径和类型。

以下是修改你的 application.yml 配置的示例:

yaml 复制代码
# application.yml

spring:
  elasticsearch:
    username: elastic
    password: -a_-nPO4EvwEqJhUnECH # 记得确保密码正确哦
    uris: https://192.168.8.140:9200
    restclient:
      ssl:
        bundle: es-ssl-bundle # 这里指向下面定义的 SSL Bundle 名称

# 配置 SSL Bundles
ssl:
  bundle:
    jks: # 你可以根据证书类型选择 jks, pem 或 pkcs12
      es-ssl-bundle: # 这是你在上面引用的 bundle 名称
        key:
          alias: "my-key-alias" # 如果你的密钥库有别名,请指定
          password: "your-keystore-password" # 密钥库的密码
        keystore:
          location: "classpath:elasticsearch/keystore.jks" # 你的 .jks 文件路径
          password: "your-keystore-password" # 密钥库的密码
          type: "JKS" # 密钥库类型,通常是 JKS 或 PKCS12
        truststore:
          location: "classpath:elasticsearch/truststore.jks" # 信任库路径(如果需要验证服务器证书)
          password: "your-truststore-password"

如果你的证书是 PEM 格式 (比如 .crt.key 文件),配置会稍有不同:

yaml 复制代码
# 如果是 PEM 格式证书的配置示例
ssl:
  bundle:
    pem:
      es-ssl-bundle:
        key: # 配置客户端私钥(如果不是双向认证,可能不需要)
          alias: "my-key-alias" 
          password: "your-private-key-password" # 私钥的密码(如果有的话)
        keystore: 
          private-key: "classpath:elasticsearch/client.key" # 你的私钥文件路径
          certificate: "classpath:elasticsearch/client.crt" # 你的证书文件路径
        truststore: 
          certificate: "classpath:elasticsearch/ca.crt" # 你从ES服务器获取的CA证书路径

关键配置说明

  • bundle 名称一致性 :确保 spring.elasticsearch.restclient.ssl.bundle 指定的名称(如 es-ssl-bundle)与在 ssl.bundle 下定义的名称完全一致
  • 证书路径locationprivate-key/certificate 需要指向你确切的证书文件位置。请确保这些文件真的在你说的地方,并且文件名和扩展名都正确。
  • 密码 :如果你的密钥库、信任库或私钥设置了密码,必须提供正确的密码
  • 证书类型 :根据你的证书文件的实际类型(JKS, PKCS12, PEM),在 ssl.bundle 下选择对应的配置节点(jks, pkcs12, pem)。

⚠️ 开发环境临时方案(不推荐用于生产)

如果只是为了在开发环境快速测试,你可以考虑暂时禁用 SSL 证书验证但这会降低连接的安全性,不适合生产环境

yaml 复制代码
spring:
  elasticsearch:
    username: elastic
    password: -a_-nPO4EvwEqJhUnECH
    uris: https://192.168.8.140:9200
    # 移除或注释掉 restclient.ssl.bundle 配置
    # restclient:
    #   ssl:
    #     bundle: es-ssl-bundle
    ssl:
      verification-mode: none # 跳过证书验证(不安全!)

重要提醒verification-mode: none 只是权宜之计,一旦 SSL 捆绑包配置正确,就应该恢复使用捆绑包的方式

💎 核心步骤总结

解决此问题的核心在于正确定义并在 Elasticsearch 配置中引用一个 SSL Bundle。为了帮你更清晰地理解这个流程,我为你梳理了以下的排查和解决步骤:
是 否 定义 Bundle 确定证书类型
JKS/PKCS12 或 PEM 在 application.yml 中
配置 ssl.bundle 段 确保证书文件路径正确 启动报错: SSL bundle not found 在 Elasticsearch 配置中
正确引用定义好的 bundle 名称 问题解决? 成功连接 检查证书内容/密码/路径

这样就可以了。

相关推荐
qq_316837753 分钟前
IP网段冲突 配置指定ip使用指定的网络接口发送,而不经过默认网关
服务器·网络·tcp/ip
布史18 分钟前
Tailscale虚拟私有网络指南
linux·网络
枷锁—sha1 小时前
彻底解决 Google Gemini 报错:异常流量与 IP 地址冲突排查指南
网络·网络协议·tcp/ip
Xの哲學1 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
木风小助理1 小时前
Elasticsearch生产环境最佳实践指南
大数据·elasticsearch·搜索引擎
-To be number.wan2 小时前
经典真题精讲|2010年408统考第34题:文件传输最少需要多久?
网络·计算机网络
知乎的哥廷根数学学派3 小时前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
好多渔鱼好多3 小时前
【流媒体协议】RTSP / RTP / RTCP 协议全景介绍
网络·网络协议·rtp·rtsp·rtcp·ipc摄像头
映秀小子4 小时前
Wireshark加减显示列
网络·测试工具·wireshark
捷米研发三部4 小时前
EtherNet/IP转CAN协议转换网关实现罗克韦尔 PLC与压力传感器通讯在轮胎压力监测系统的应用案例
服务器·网络