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
相关产品推荐
相关产品推荐

