Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析

众所周知,原生 Elasticsearch 默认开启的是 HTTP 明文接口,并且不开启任何身份认证或传输加密。若想启用 TLS/SSL 加密及账号密码验证,通常需要配置繁琐的安全模块。

而 Easysearch 在此基础上做了极大的简化,通过官方提供的 initialize.sh 脚本,一键完成初始化即可自动生成证书、配置 HTTPS,并启用密码认证。

当然,对于本地开发或临时测试场景,我们也可能希望关闭 HTTPS 与认证,直接通过 HTTP 调试服务。本文将从配置文件出发,逐步讲解如何根据不同需求配置 Easysearch 的安全策略、通信协议与外网访问权限。


🛠 一、初始化输出与默认账号密码

执行以下初始化命令后:

1
bin/initialize.sh

终端及 initialize.log 文件中将输出初始的访问方式和管理员账号密码,例如:

1
curl -ku admin:160824cab0b02193226e https://localhost:9200

默认情况下,Easysearch 启用了 HTTPS 通信及密码认证。


⚙ 二、修改配置文件:easysearch.yml

配置文件路径:

1
config/easysearch.yml

例如,你可以修改集群名称:

1
cluster.name: my-application

修改前访问输出:

1
"cluster_name": "easysearch"

修改后:

1
"cluster_name": "my-application"

🌐 三、开放外网访问(单节点部署)

若希望在局域网或公网访问 Easysearch,可以加入以下配置:

1
2
3
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node

此外,为增强对原生 Elasticsearch 客户端的兼容性,建议添加:

1
elasticsearch.api_compatibility: true

🔐 四、控制 HTTPS 与认证功能开关

Easysearch 提供两个核心参数控制安全行为:

参数 说明
security.enabled 控制是否启用身份认证和安全模块
security.ssl.http.enabled 控制是否启用 HTTPS(SSL/TLS)

你可以根据环境选择配置组合:

security.enabled security.ssl.http.enabled 效果
true true 默认配置,启用 HTTPS 和认证(推荐)
true false 明文 HTTP + 启用认证
false true 启用加密但无身份认证(不常见)
false false 完全开放,无认证 + HTTP(⚠️ 不建议生产使用)

📸 五、示例:启用 HTTP 并保留认证

如果你希望使用 HTTP 而不启用 HTTPS,可修改如下配置:

1
2
security.enabled: true
security.ssl.http.enabled: false

访问时依然需要提供账号密码,效果如下图所示:

image-20250425120123219


🔧 六、用户认证与密码管理

初始化完成后,Easysearch 默认会创建一个管理员用户 admin,其信息存储在:

1
config/security/user.yml

示例如下:

1
2
3
4
5
6
admin:
hash: "$2y$12$rmNDJxpQdRDb3F1dqk.uweSZqH3VAqeEpkP298vJ6QS99K80kbRoO"
reserved: true
external_roles:
- "admin"
description: "Admin user"

你可以使用 Postman 或 Python 脚本验证访问:

1
2
3
4
5
6
7
8
import requests

url = "http://localhost:9200"
headers = {
'Authorization': 'Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU='
}
response = requests.get(url, headers=headers)
print(response.text)

👤 七、新建用户与管理接口

你可以通过以下接口查询当前用户信息:

1
GET /_security/account

在这里插入图片描述

也可以访问:

1
GET /_security/user

在这里插入图片描述

用于列出所有用户。

虽然 user.yml 文件默认只包含 admin 用户,但通过 API 添加的新用户同样生效。如下图所示,通过 Postman 创建的新用户已成功生效:

  • 新用户创建界面:

    新建用户

  • 使用新用户访问验证成功:

    新用户访问


✅ 总结

场景 推荐配置
本地测试(无加密、无认证) security.enabled: false + security.ssl.http.enabled: false
本地调试(加认证、无加密) security.enabled: true + security.ssl.http.enabled: false
生产环境(安全通信) security.enabled: true + security.ssl.http.enabled: true
特殊用途(加密但无认证) security.enabled: false + security.ssl.http.enabled: true

EasySearch 提供了非常灵活的配置机制,开发者可以根据具体需求,自由切换 HTTP/HTTPS、开启或关闭认证模块。理解并掌握这两个核心安全参数,将大大提升你对 EasySearch 的运维掌控力。

🔐 附录:关于 Basic Auth 的原理与使用方式

在 Easysearch 默认开启认证的情况下,我们在请求中经常会看到如下的 Authorization 头:

1
Authorization: Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU=

这其实就是标准的 HTTP Basic 认证,格式如下:

1
Authorization: Basic <Base64 编码后的 用户名:密码>

🧠 举个例子:

Base64 编码前是:

1
admin:160824cab0b02193226e

编码后变成:

1
YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU=

也就是说,以下请求:

1
2
3
headers = {
'Authorization': 'Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU='
}

等价于:

1
curl -u admin:160824cab0b02193226e http://localhost:9200

⚠️ 安全提示:

Base64 只是编码 不是加密,账号密码依然是明文形式,因此 必须配合 HTTPS 使用,否则容易被中间人监听。


🌐 使用 URL 携带用户名密码(不推荐但有时方便)

除了 Header 或 curl -u 的方式,HTTP 协议还允许通过 URL 携带账号密码:

1
curl http://admin:160824cab0b02193226e@localhost:9200

浏览器中也可以直接访问:

1
http://admin:160824cab0b02193226e@localhost:9200

Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析

https://xu-hardy.github.io/easysearch-基础运维扫盲指南:从-http-到-https、认证与安全访问全解析/

作者

Xu

发布于

2025-07-02

更新于

2025-07-01

许可协议

评论