You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch的RestHighLevelClient配置usingSsl后仍不使用HTTPS如何解决

问题解决办法

你遇到的配置不生效是Spring Data Elasticsearch 4.1.2版本的已知问题,错误日志里的HTTP请求并非来自你自定义的RestHighLevelClient,而是Spring Boot自动装配的Elasticsearch健康检查组件默认使用了响应式客户端的基础配置,没有读取你给RestHighLevelClient设置的SSL参数。

下面提供两种可直接落地的解决方案:

方案一:直接禁用Elasticsearch健康检查(最简单快速)

如果你不需要Spring Boot内置的Elasticsearch健康监控,直接在配置文件中添加如下配置即可:

# application.properties
management.health.elasticsearch.enabled=false

如果使用yml格式配置:

# application.yml
management:
  health:
    elasticsearch:
      enabled: false

改完重启项目,你自定义的RestHighLevelClient就会正常使用HTTPS发起请求。

方案二:保留健康检查,排除响应式客户端自动装配

如果你需要保留健康检查功能,需要在启动类上排除响应式Elasticsearch客户端的自动装配类,避免健康检查逻辑走响应式客户端的默认配置:
Kotlin版启动类配置示例:

@SpringBootApplication(exclude = [ReactiveElasticsearchRestClientAutoConfiguration::class])
class YourApplication

fun main(args: Array<String>) {
    runApplication<YourApplication>(*args)
}

Java版启动类配置示例:

@SpringBootApplication(exclude = ReactiveElasticsearchRestClientAutoConfiguration.class)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

配置完成后,健康检查组件就会使用你自定义的RestHighLevelClient的配置发起HTTPS请求。

额外注意事项

如果你的Elasticsearch实例使用的是自签名SSL证书,还需要在usingSsl()方法中传入信任的证书上下文,不然会报证书不信任错误,示例配置如下:

// 加载自签证书的逻辑示例
val sslContext = SslContextBuilder.forClient()
    .trustManager(ResourceUtils.getFile("classpath:es-ca.crt"))
    .build()

val clientConfiguration = ClientConfiguration.builder()
    .connectedTo("localhost:9200")
    .usingSsl(sslContext)
    // 有账号密码的情况需要加鉴权配置
    // .withBasicAuth("elastic", "你的密码")
    .build()

内容的提问来源于stack exchange,提问作者pjung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:54:07