当前位置: 首页 > article >正文

springboot使用ssl连接elasticsearch

使用es时ssl证书报错 unable to find valid certification path to requested target

1.依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

2.配置证书

ssl证书转换,使用的jdk工具将cer证书转换为jks证书

keytool -import -alias mycert -file mycert.cer -keystore mytruststore.jks -storepass test123..

application.yaml配置

spring:  
  elasticsearch:
    key-store: classpath:ssl/truststore.jks
    #转换证书时的密码
    key-store-password: test123..
    username: admin
    password: xxx
    #不用带协议
    uris: xxxxx:9200

配置类

package com.echosell.spider.appspider.config;

import com.echosell.spider.appspider.entity.properties.EsProperties;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.security.KeyStore;

/**
 * @author zzy
 * @project echosell-spider
 * @description es配置
 * @date 2025年01月20日*
 */
@Configuration
@Slf4j
public class ElasticsearchTemplateConfig {

    @Autowired
    EsProperties esProperties;
    @Autowired
    ResourceLoader resourceLoader;

    @Bean
    public RestHighLevelClient restHighLevelClient() throws Exception {
        ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo(esProperties.getUris())
                .usingSsl(createSSLContext(esProperties.getKeyStore(), esProperties.getKeyStorePassword()))
                .withBasicAuth(esProperties.getUsername(), esProperties.getPassword())
                .build();
        return RestClients.create(clientConfiguration).rest();
    }

    @Bean
    public ElasticsearchRestTemplate elasticsearchRestTemplate(RestHighLevelClient restHighLevelClient){
        return new ElasticsearchRestTemplate(restHighLevelClient);
    }




    private SSLContext createSSLContext(String keyStorePath, String keyStorePassword) throws Exception {
//        // 加载密钥库
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        Resource resource = resourceLoader.getResource(keyStorePath);
        // 读取文件内容...
        try (FileInputStream fileInputStream = new FileInputStream(resource.getFile())) {
            trustStore.load(fileInputStream, keyStorePassword.toCharArray());
        }

        // 创建信任管理器工厂
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trustStore);
        // 初始化 SSLContext
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustManagerFactory.getTrustManagers(), null);

        return sslContext;
    }

}

3.信任所有证书(无证书使用)

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
}}, new SecureRandom());

直接使用ElasticsearchRestTemplate即可

4.介绍

网上百度无结果,查看了部分源码发现 RestHighLevelClient 使用的SSLContext,且默认使用的系统默认证书 ,将自己的证书导入 SSLContext,封装到RestHighLevelClient即可。


http://www.kler.cn/a/516976.html

相关文章:

  • ElasticSearch(十一)— Elasticsearch中的SQL语句
  • [Unity 热更方案] 使用Addressable进行打包管理, 使用AssetBundle进行包的加载管理.70%跟练
  • windows平台通过命令行安装前端开发环境
  • JQuery基本介绍和使用方法
  • 网站HTTP改成HTTPS
  • 【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)
  • 【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)
  • FastExcel导入Excel详细步骤
  • MyBatis-Plus之常用注解
  • Java定时任务实现方案(二)——ScheduledExecutorService
  • C#通过SDK包与三菱PLC仿真通讯
  • Java数据结构方面的面试试题以及答案解析
  • 【Go面试】基础八股文篇 (持续整合)
  • 加州大学伯克利分校最新研究:通过语言融合视听触觉异构传感器实现机器人通用操作策略微调
  • Python识别处理验证码技术详解
  • C语言程序设计十大排序—计数排序
  • 基于STM32的AI物联网计算实现指南
  • vue3+vite+ts安装wangeditor富文本编辑器
  • 【含开题报告+文档+PPT+源码】基于Java Springboot的仓库管理系统设计与实现
  • 从 Facebook 的数据泄露事件看社交平台的隐私保护责任
  • Python基于Django的花卉商城系统的设计与实现(附源码,文档说明)
  • 图形化数据报文转换映射工具
  • HTTP 配置与应用(不同网段)
  • Lua语言的Web开发
  • MySQL创建和操纵表
  • 使用 GitHub Page 托管个人博客