ElasticSearch 8.x 使用 High Level Client 以 HTTPS 方式链接,SSL 证书、主机名验证器 各是什么,如何忽略

ElasticSearch

1、ElasticSearch学习随笔之基础介绍
2、ElasticSearch学习随笔之简单操作
3、ElasticSearch学习随笔之java api 操作
4、ElasticSearch学习随笔之SpringBoot Starter 操作
5、ElasticSearch学习随笔之嵌套操作
6、ElasticSearch学习随笔之分词算法
7、ElasticSearch学习随笔之高级检索
8、ELK技术栈介绍
9、Logstash部署与使用
10、ElasticSearch 7.x 版本使用 BulkProcessor 实现批量添加数据
11、ElasticSearch 8.x 弃用了 High Level REST Client,移除了 Java Transport Client,推荐使用 Elasticsearch Java API
12、ElasticSearch 8.x 使用 snapshot(快照)进行数据迁移
13、ElasticSearch 8.x 版本如何使用 SearchRequestBuilder 检索
14、ElasticSearch 8.x 使用 High Level Client 以 HTTPS 方式链接,SSL 证书、主机名验证器 各是什么,如何忽略

ElasticSearch,创始人 Shay Banon(谢巴农)
本文主要讲解ElasticSearch 高级搜索实战,来满足复杂的业务场景,还是用 Kibana 来操作。


文章目录

  • ElasticSearch
  • 前言
  • 一:pom 依赖
  • 二:开放式连接方式
  • 三:用户名密码验证方式
  • 四:忽略 SSL证书 和 主机名验证
    • 4.1 忽略 SSL 认证
      • 方式一
      • 方式二
      • 方式三
    • 4.2 忽略 主机名验证


前言

在平时测试环境中,我们可以通过 IP 地址 或者 域名【http://***】来简单粗暴的连接 ElasticSearch 服务,比较内网测试没必要考虑别的,连接上能进行索引的操作即可;不过到了生产环境,安全问题成了 头号杀手,毕竟数据无价嚒,不过目前很多企业应用都会部署到云端,应用ElasticSearch 服务之前其实也是属于内网连接,并不会暴漏链接到外面,再加上云服务自身的安全和防火前的保护,所以安全基本上不用考虑了。
可以公司是有规范的,无论是 DB 数据库还是缓存,还是像 ElasticSearch 这种搜索引擎必须要有 用户名和密码 这层安全校验的,这是安全最基本的,所以应对不同的环境 或许 就需要不同的连接方式了。

一:pom 依赖

对于 ElasticSearch 客户端的版本,不需要太高,稳定很重要,对于有些莫名其妙的问题,换一个 版本的 客户端有可能就好了,亲身经历

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.15.2</version>
</dependency>

二:开放式连接方式

三:用户名密码验证方式

这种方式在其他博客中已经提到好几次了,放到这里只为有需要的 码友 们拷贝代码。

private static RestHighLevelClient createClient(){String hostname = "192.168.0.67";int port = 9200;String esUsername = "your es username";String esPassword = "your es password";final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername, esPassword));RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(hostname, port)).setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider));return new RestHighLevelClient(restClientBuilder);
}

四:忽略 SSL证书 和 主机名验证

生产环境的 ElasticSearch 有时可能是通过域名来访问的,并且是 https 开头的,那就需要 SSL/TLS 认证了,但是我们并不需要,那只能忽略了。

4.1 忽略 SSL 认证

按上面说的,ElasticSearch 访问地址是 https://***,而只配置了 用户名密码,那用客户端链接则 可能 会报如下错误:

javax.net.ssl.SSLHandshakeException:PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderException:unable to find valid certification path to requested target
at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:783)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:218)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:205)
at org.elasticsearch.client.RestHighLevelclient.internalPerformRequest(RestHighLevelclient.java:1454)
at org.elasticsearch.client.RestHighLevelclient.performRequest(RestHighLevelclient.java:1424)

此时我们需要忽略 SSL 认证,然忽略 SSL 的写法也有好几种。

注意: 以下三种方式选择其中一种就可以,那种适合就用那种。

方式一

首先获取 TLS 的 SSLContext 实例,再进行初始化,初始化的时候什么都不做。

public static RestHighLevelClient createClient(){String hostname = "es.test.com";int port = 9200;String esUsername = "your es username";String esPassword = "your es password";// 配置用户名和密码CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername, esPassword));RestClientBuilder clientBuilder = RestClient.builder(new HttpHost(hostname, port, "https"));clientBuilder.setHttpClientConfigCallback( httpAsyncClientBuilder -> {// 配置认证支持httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);// 忽略证书配置try {SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, new TrustManager[] {new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s)throws CertificateException {// 忽略证书错误 信任任何客户端证书}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s)throws CertificateException {// 忽略证书错误 信任任何客户端证书}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}},null);httpAsyncClientBuilder.setSSLContext(sslContext);} catch (NoSuchAlgorithmException | KeyManagementException e) {System.out.println("忽略证书错误");}// 忽略 hostname 校验认证httpAsyncClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);return httpAsyncClientBuilder;});return new RestHighLevelClient(clientBuilder);
}

方式二

首先创建一个信任策略的 TrustStrategy,再通过策略构建一个 SSLContext 。

public static RestHighLevelClient createClient(){String hostname = "es.test.com";int port = 9200;String esUsername = "your es username";String esPassword = "your es password";// 配置用户名和密码CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername, esPassword));RestClientBuilder clientBuilder = RestClient.builder(new HttpHost(hostname, port, "https"));clientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder -> {httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);try {// 创建一个信任所有证书的 TrustStrategy 策略TrustStrategy acceptTrustStrategy = (chain, authType) -> true;// 使用 SSLContextBuilder 创建 SSLContextSSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, acceptTrustStrategy).build();httpAsyncClientBuilder.setSSLContext(sslContext);} catch (NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {e.printStackTrace();}return httpAsyncClientBuilder;});return new RestHighLevelClient(clientBuilder);
}

方式三

这里需要一个引入一个第三方的 jar 包,封装了我们需要的 SSL 认证实例。

<dependency><groupId>io.github.hakky54</groupId><artifactId>sslcontext-kickstart</artifactId><version>8.1.4</version>
</dependency>

下面通过第三方 jar 包提供的 SSLFactory 来得到 SSLContext 。

public static RestHighLevelClient createClient(){String hostname = "es.test.com";int port = 9200;String esUsername = "your es username";String esPassword = "your es password";// 用户名和密码认证CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername, esPassword));// 配置策略工厂SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();RestClientBuilder clientBuilder = RestClient.builder(new HttpHost(hostname, port, "https"));clientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder -> {httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);// 通过策略工厂获取一个 SSLContexthttpAsyncClientBuilder.setSSLContext(sslFactory.getSslContext());return httpAsyncClientBuilder;});return new RestHighLevelClient(clientBuilder);
}

4.2 忽略 主机名验证

处理 SSL 认证,还有可能包如下错误:

java.io.IOException: Host name 'devintes.jibo.cn' does not match the certificate subject provided by the peer (CN=elasticsearch-devint-master)

我们接着忽略,只需要在忽略 SSL 是再忽略 主机名验证就可以了,代码如下:

httpAsyncClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);

其实再上面的 方式三 中,用 SSLFactory 也是可以忽略的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能之线性优化和非线性优化

如果目标函数或者约束函数中存在非线性函数,此类问题称为非线性优化。 线性优化 在一组线性的等式或不等式约束下,求一个线性函数的最小值,此类问题的数学模型如下: m i n c x s . t . { A x ≤ b x ≥ 0 min\quad cx \\ \\ s.t. \begin{cases} Ax\leq b \\ \\ x\geq0 \…

基金是什么

一、基金是什么&#xff1f; 买基金就是委托别人帮我们投资&#xff0c;替我们买卖股票债券。 二、为什么委托别人&#xff1f; 因为我们不懂投资方面的知识&#xff0c;或者我们没有时间来做投资&#xff0c;那么就可以找专业人士帮我们投资。就像家长帮小孩报辅导班&#…

[幻灯片]分析设计高阶-02-领域建模结构部分Part1

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 如何选择UMLChina服务 UMLChina公众号精选&#xff08;20240207更新&#xff09;

四、机器学习基础概念介绍

四、机器学习基础概念介绍 1_机器学习基础概念机器学习分类1.1 有监督学习1.2 无监督学习 2_有监督机器学习—常见评估方法数据集的划分2.1 留出法2.2 校验验证法&#xff08;重点方法&#xff09;简单交叉验证K折交叉验证&#xff08;单独流出测试集&#xff09;&#xff08;常…

大数据思考:面对海量数据时,选择哪种模式才是更适合自己的?

如果您从事科技行业或者您不在这个行业&#xff0c;也许您已经听说过很多关于 AI 的信息。 我所说的不仅仅是多年来我们都喜欢的科幻小说中“天网正在接管地球”式的人工智能&#xff0c;而是人工智能和机器学习已经逐渐成为我们日常生活中的实际应用 . 大数据是人工智能与机器…

PCIE 参考时钟架构

一、PCIe架构组件 首先先看下PCIE架构组件&#xff0c;下图中主要包括&#xff1a; ROOT COMPLEX (RC) (CPU); PCIE PCI/PCI-X Bridge; PCIE SWITCH; PCIE ENDPOINT (EP) (pcie设备); BUFFER; 各个器件的时钟来源都是由100MHz经过Buffer后提供。一个PCIE树上最多可以有256…

Android Studio中打开文件管理器

文章目录 一、前言二、操作步骤 一、前言 在Android Studio中有时候需要查看手机的文件目录或者复制文件&#xff0c;但是有时候文件管理器找不到在哪&#xff0c;这里记录该操作流程 二、操作步骤 第一步: 第二步: 第三步:

云游戏发行需要哪些条件

云游戏是一种创新性的游戏服务模式&#xff0c;将游戏运算和渲染等处理任务移至云端服务器&#xff0c;通过互联网实时传输画面和操作指令&#xff0c;使玩家能够在低端终端设备上也能流畅玩游戏。要做云游戏发行&#xff0c;需要考虑一系列条件&#xff0c;包括技术、基础设施…

Qt未来市场洞察

跨平台开发&#xff1a;Qt作为一种跨平台的开发框架&#xff0c;具有良好的适应性和灵活性&#xff0c;未来将继续受到广泛应用。随着多设备和多平台应用的增加&#xff0c;Qt的前景在跨平台开发领域将更加广阔。 物联网应用&#xff1a;由于Qt对嵌入式系统和物联网应用的良好支…

Ubuntu 18.04上安装cuDNN 8.9.6.50:一站式指南

Content 一、前言二、准备工作三、安装步骤1. 启用本地仓库2. 导入CUDA GPG密钥3. 更新仓库元数据4. 安装运行时库5. 安装开发者库6. 安装代码示例7. 另外一种安装办法 四、验证安装1. 验证cuDNN版本2. 测试示例代码 五、总结 一、前言 在深度学习领域&#xff0c;高效的计算资…

通过Demo学WPF—数据绑定(二)

准备 今天学习的Demo是Data Binding中的Linq&#xff1a; 创建一个空白解决方案&#xff0c;然后添加现有项目&#xff0c;选择Linq&#xff0c;解决方案如下所示&#xff1a; 查看这个Demo的效果&#xff1a; 开始学习这个Demo xaml部分 查看MainWindow.xaml&#xff1a; …

【Java八股面试系列】JVM-常见参数设置

目录 堆内存相关 显式指定堆内存–Xms和-Xmx 显式新生代内存(Young Generation) 显式指定永久代/元空间的大小 垃圾收集相关 垃圾回收器 GC 日志记录 处理 OOM JDK监控和故障处理工具总结 堆内存相关 Java 虚拟机所管理的内存中最大的一块&#xff0c;Java 堆是所有线…

【嵌入式-传感器】从旋转编码器到学会看懂方波

背景&#xff1a; 在学习STM32F103的中断时&#xff0c;用到旋转编码器&#xff0c;需要通过旋转编码器输出的DO信号&#xff0c;获取旋转的刻度和方向。 前提知识&#xff1a; 使用中断需要RCC使能GPIO外设口及AFIO口、初始化GPIO、中断引脚AFIO选择配置、EXTI外部中断配置…

第62讲商品搜索动态实现以及性能优化

商品搜索后端动态获取数据 后端动态获取数据&#xff1a; /*** 商品搜索* param q* return*/GetMapping("/search")public R search(String q){List<Product> productList productService.list(new QueryWrapper<Product>().like("name", q)…

SpringMVC 1.请求参数检查 2.全局异常处理 3.请求参数封装为Pojo

ErrorEnum.java // 枚举所有的错误 package com.example.demo.enums;import lombok.Getter;public enum ErrorEnum {SYSTEM_ERROR(-1, "系统错误"),PARAM_ERROR(-2, "参数错误"),OK(0, "成功"),;Getterprivate final int code;Getterprivate fi…

免费生成ios证书的方法(无需mac电脑)

使用hbuilderx的uniapp框架开发移动端程序很方便&#xff0c;可以很方便地开发出移动端的小程序和app。但是打包ios版本的app的时候却很麻烦&#xff0c;官方提供的教程需要使用mac电脑来生成证书&#xff0c;但是mac电脑却不便宜&#xff0c;一般的型号都差不多上万。 因此&a…

Linux部署Nacos注册中心实现远程访问UI管理界面

Nacos是阿里开放的一款中间件,也是一款服务注册中心&#xff0c;它主要提供三种功能&#xff1a;持久化节点注册&#xff0c;非持久化节点注册和配置管理。 本例通过结合Cpolar内网穿透实现远程访问Nacos 提供的UI (控制台)界面,帮助管理所有的服务和应用的配置 Cpolar内网穿…

OpenHarmony轻量级内核-LiteOS-M

OpenHarmony轻量级内核 思维导图 https://download.csdn.net/download/lanlingxueyu/88816723 概述 内核是一人操作系统的运算核心,决定着系统的性能和稳定性。它是基于硬件的第一层软件扩充,提供操作系统的基本功能,是操作系统工作的基础。它负责管理系统的进程、内存、…

【Node系列】node中的流(Stream)

文章目录 一、流&#xff08;Stream&#xff09;二、四种基本流的案例三、组合流&#xff1a;管道流&#xff08;Pipeline Stream&#xff09;四、组合流&#xff1a;链式流&#xff08;Chaining Stream&#xff09;五、热门文章 一、流&#xff08;Stream&#xff09; Node.j…

idea: 无法创建Java Class文件(SpringBoot)已解决

第一&#xff1a;点击file-->project Sructure... 第二步&#xff1a;点击Moudules 选择自己需要创建java的文件夹&#xff08;我这里选择的是main&#xff09;右键点击Sources&#xff0c;然后点击OK即可 然后就可以创建java类了