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

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证

安全扫描时发现了一个高危漏洞:Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时,需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤,为单节点 Elasticsearch 实现最基本的安全功能,包括启用 Elasticsearch 自带的安全功能和配置传输层 SSL,以确保数据传输的加密和访问权限的严格管理。 (elaticsearch版本7.9.2)


修改配置文件

编辑单节点的 elasticsearch.yml 文件,确保包含以下内容:

# 启用 Elasticsearch 的安全功能
xpack.security.enabled: true# 启用传输层 SSL
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required# 指定证书路径(使用默认生成的 P12 文件)
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

生成证书

在 Elasticsearch 安装目录中,使用 elasticsearch-certutil 工具生成证书

生成 CA 文件

cd /bin
./elasticsearch-certutil ca# (设置证书密码)可以直接回车选择不设置密码
Please enter the desired output file [elastic-stack-ca.p12]: 
Enter password for elastic-stack-ca.p12 :
  • 输出文件:elastic-stack-ca.p12

  • 选择密码(可留空)

    image-20241203165352589

生成节点证书

cd /bin
./elasticsearch-certutil cert --ca elastic-stack-ca.p12# (设置证书密码)可以直接回车选择不设置密码
Enter password for CA (elastic-stack-ca.p12) : 
Please enter the desired output file [elastic-certificates.p12]: 
Enter password for elastic-certificates.p12 : 
  • 输出文件:elastic-certificates.p12

  • 可选择为证书设置密码

    image-20241203165525302

将证书复制到配置目录

将生成的 elastic-certificates.p12 文件移动到 Elasticsearch 的配置目录(通常是 $ES_HOME/config)下:

mv elastic-certificates.p12 $ES_HOME/config
# 赋权为es用户权限
chown es:es elastic-certificates.p12

image-20241203165304163


(可选)存储证书密码

如果生成证书时设置了密码,需要将密码存储到 Elasticsearch 密钥库中:

./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

按照提示输入密码


启动 Elasticsearch

配置完成后,切换为 es 用户启动 Elasticsearch 或重启ES服务:

./elasticsearch

如果一切正常,日志中应显示以下内容:

[2024-12-03T14:27:33,401][INFO ][o.e.x.s.s.SecurityStatusChangeListener] [es-xcu-node] Active license is now [BASIC]; Security is enabled

验证安全配置

设置用户密码

默认情况下,Elasticsearch 启用了几个内置用户(例如 elastic)。运行以下命令设置密码:

cd /bin
./elasticsearch-setup-passwords interactive

按提示为用户设置密码,特别是 elastic 用户。

访问 REST 接口

使用 curl 或其他工具测试:

# 未带认证信息访问会提示报错
curl http://localhost:9200
# 提示 401 错误,表明未授权# 带认证信息的请求
curl -u elastic:设置的密码 http://localhost:9200

如果返回正常的 Elasticsearch 信息,则配置成功。

浏览器访问

image-20241203170846599


Spring Boot 项目中配置 Elasticsearch 连接账户密码

1. 引入依赖

pom.xml 中添加 Elasticsearch 客户端依赖:

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

2. 配置类

在 Spring Boot 项目中,通过 Java 配置类创建 RestHighLevelClient Bean:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticsearchConfig {@Value("${elasticsearch.host}")private String host;@Value("${elasticsearch.port}")private int port;@Value("${elasticsearch.username}")private String username;@Value("${elasticsearch.password}")private String password;@Beanpublic RestHighLevelClient restHighLevelClient() {// 配置用户名和密码BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username, password));// 构建 RestClientRestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(host, port)).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));return new RestHighLevelClient(restClientBuilder);}
}

3. 配置文件

application.ymlapplication.properties 中添加 Elasticsearch 的相关配置:

elasticsearch:host: localhostport: 9200username: elasticpassword: elasticPWD

4. 使用示例

在需要使用 RestHighLevelClient 的地方直接注入并使用:

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.MainResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class ElasticsearchService {@Autowiredprivate RestHighLevelClient restHighLevelClient;public String getClusterInfo() {try {MainResponse response = restHighLevelClient.info(RequestOptions.DEFAULT);return response.getClusterName().toString();} catch (Exception e) {e.printStackTrace();return "Error fetching cluster info";}}
}

5. 启动项目并验证

启动项目后,调用 ElasticsearchService 中的方法,验证是否成功连接到 Elasticsearch

相关文章:

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞&#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时&#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤&#xff0c;为单节…...

二分查找(带图详解)

优选算法系列 文章目录 优选算法系列前言一、二分查找的思想二、算法使用小总结 三、代码实现四、二分查找拓展4.1、查找第一次出现的target小总结 4.2、target最后出现的位置小总结 五、代码总结 前言 在这篇博客中&#xff0c;我会给大家分享二分查找及其扩展。 这是链接-&…...

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本&#xff1a;标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样…...

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...

单片机软件工程师前景分析

单片机软件工程师的前景在2024年看起来是积极的。随着物联网&#xff08;IoT&#xff09;、自动化、智能设备等领域的快速发展&#xff0c;对于能够开发基于单片机&#xff08;MCU&#xff09;如STM32、ARM、51等嵌入式系统的软件工程师需求持续增长。这些工程师负责设计和实现…...

在Java中几种常用数据压缩算法的实现及其优劣势

在Java中几种常用数据压缩算法的实现及其优劣势 背景&#xff1a;项目需要引入Redis作为缓存组件&#xff0c;需要考虑到Redis的内存占用&#xff08;机器内存越大&#xff0c;成本越高&#xff09;&#xff0c;因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...

Word——如何打出 符号中的 1、2、3等带圆圈的序号

一、方式1 1.1&#xff1a;点击 插入-符号 1.2&#xff1a;字体 选择 Wingdings 或者 Wingdings 2 二、方式2 带1的圈&#xff1a;输入 2460&#xff0c;然后按 AItX 带2的圈&#xff1a;输入 2461&#xff0c;然后按 AItX 带3的圈&#xff1a;输入 2462&#xff0c;然后按 …...

操作系统之进程与线程

进程 定义&#xff1a; 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的独立单位。 组成&#xff1a; 包括程序代码、程序处理的数据、程序计数器、一组寄存器的值以及系统资源&#xff08;如打开的文件&#xff09;等。 …...

代码随想录算法训练营打卡第35天:背包问题

前言 zaccheo打卡代码随想录第35天 由于这段时间工作太忙了&#xff08;加上我的懒病犯了&#xff09;导致迟打卡了好几天555555.。。。 今天的主要是动态规划中的背包问题&#xff0c;这个真的是蛮难理解的&#xff0c;我把我自己强行按在椅子上半个小时一点一点的看卡哥文章…...

【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…...

vscode(一)安装(ubuntu20.04)

1、更新软件包列表 sudo apt update2、安装依赖包 sudo apt install software-properties-common apt-transport-https wget3、导入Microsoft GPG密钥 wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -4、向系统添加VSCode存储库 sudo…...

利用永恒之蓝对win7进行键盘记录

打开kali中的msfconsole 找到永恒之蓝&#xff0c;设置靶机ip&#xff0c;后可以exploit&#xff0c;也可以run 连接成功 查看进程&#xff0c;选择监听靶机win7上的cmd.exe进程 当前进程不是1484&#xff0c;需要迁移到1484 cmd.exe&#xff0c;进程迁移 键盘监听&#xff0c;…...

万字长文解读深度学习——dVAE(DALL·E的核心部件)

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…...

RL仿真库pybullet

1. 介绍 PyBullet是一个基于Bullet Physics引擎的物理仿真Python接口&#xff0c;主要用于机器人仿真模拟。 1.1 主要特点 提供大量预设的机器人模型&#xff0c;例如URDF(统一机器人描述格式)、SDF、MJCF 格式。适用于训练和评估强化学习算法&#xff0c;提供了大量的强化学…...

file_get_contents函数导致网站卡死响应超时

宝塔控制面板系统下运行包含file_get_contents函数的php文件时候&#xff0c;发生以下报错&#xff1a; PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed: 解决方法&#xff1a; 一&#xff1a;需要检查请求的远程主机是否在本机的/etc/host…...

如何使用C#与SQL Server数据库进行交互

一.创建数据库 用VS 创建数据库的步骤&#xff1a; 1.打开vs&#xff0c;创建一个新项目&#xff0c;分别在搜素框中选择C#、Windows、桌面&#xff0c;然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”&#xff0c;右键单击“数据连接”&#xff0…...

#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(上)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

vue3 项目搭建-9-通过 router 在跳转页面时传参

第一步&#xff0c;在跳转链接处挂载方法&#xff0c;将要传输的数据传入&#xff1a; <a href"#" click.prevent"goToArticle(obj.id)" class"click"><h1>{{obj.title}}</h1><p>作者&#xff1a;{{obj.author}}</p&…...

Java、python标识符命名规范

Java 包名所有字母一律小写。例如cn.com.test类名和接口名每个单词的首字母都要大写。例如ArrayList、Iterator常量名所有字母都大写&#xff0c;单词之间用下划线连接&#xff0c;例如&#xff1a;DAY_OF_MONTH变量名和方法名的第一个单词首字母小写&#xff0c;从第二个单词…...

高效职场人

文章目录 1.时间效能 ABCD2.高效员工的习惯之 自我掌控的秘诀3.学会做主4.学会互赢5.学会沟通、学会聆听6.学会可持续发展&#xff1a;四个方面更新自我(1)更新身体(2)更新精神(3)更新智力(4)更新人际情感 1.时间效能 ABCD 时间四象限&#xff1a; A类任务&#xff1a;重要且紧…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

MySQL基本操作(续)

第3章&#xff1a;MySQL基本操作&#xff08;续&#xff09; 3.3 表操作 表是关系型数据库中存储数据的基本结构&#xff0c;由行和列组成。在MySQL中&#xff0c;表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...

TI德州仪器TPS3103K33DBVR低功耗电压监控器IC电源管理芯片详细解析

1. 基本介绍 TPS3103K33DBVR 是 德州仪器&#xff08;Texas Instruments, TI&#xff09; 推出的一款 低功耗电压监控器&#xff08;Supervisor IC&#xff09;&#xff0c;属于 电源管理芯片&#xff08;PMIC&#xff09; 类别&#xff0c;主要用于 系统复位和电压监测。 2. …...

Flask和Django,你怎么选?

Flask 和 Django 是 Python 两大最流行的 Web 框架&#xff0c;但它们的设计哲学、目标和适用场景有显著区别。以下是详细的对比&#xff1a; 核心区别&#xff1a;哲学与定位 Django: 定位: "全栈式" Web 框架。奉行"开箱即用"的理念。 哲学: "包含…...

《开篇:课程目录》

大家好&#xff01;我是一名.NET技术开发者&#xff0c;长期以来积累了比较多的项目实战经验&#xff0c;现在把它分享给大家&#xff0c;希望能够帮助到大家&#xff0c;同时为.NET社区提供一份力量&#xff0c;让更多的开发者参与进来。 要讲解的课程如下&#xff1a; 《介绍…...