【待验证】“ES怎么开启认证,但不开启 HTTPS?”
保持。设置。客户端连接时使用http://协议,并携带用户名密码。再次提醒:除非您非常清楚自己在做什么(例如仅在localhost调试),否则请务必开启 HTTPS。
·
“怎么开启认证,但不开启 HTTPS?”
答案是:完全可以。
这在技术上称为 “明文传输 + 身份验证”。
- 认证 (Authentication):ES 会检查用户名和密码(或 Token)。
- 传输 (Transport):密码和数据在网线上传输时是明文的(未加密),容易被抓包窃听。
⚠️ 高危警告:这种配置绝对禁止在公网或不安全的网络环境中使用。因为黑客可以轻易截获您的密码。它仅适用于完全可信的本地回环 (localhost) 或 物理隔离的内网。
🛠️ 配置步骤 (以 Elasticsearch 8.x 为例)
在 ES 8.x 中,安全功能默认开启且强制 HTTPS。要实现了“只认证不加密”,您需要显式关闭 SSL。
1. 修改 elasticsearch.yml
您需要做两件事:
- 确保
xpack.security.enabled为true(默认就是)。 - 显式关闭 HTTP 层的 SSL。
# elasticsearch.yml
# 1. 开启安全功能 (包含认证、授权)
# 8.x 默认就是 true,建议显式写上以示明确
xpack.security.enabled: true
# 2. 【关键】显式关闭 HTTP SSL
# 这样 ES 就会监听 http:// 而不是 https://
xpack.security.http.ssl.enabled: false
# 3. (可选) 如果您集群节点间通信也不想加密,也关掉 Transport SSL
xpack.security.transport.ssl.enabled: false
2. 重启 Elasticsearch
sudo systemctl restart elasticsearch
3. 初始化密码 (如果还没做过)
如果是第一次开启安全功能,需要重置内置用户密码:
bin/elasticsearch-reset-password -u elastic
# 记下输出的密码
4. 验证与使用
现在,ES 监听在 http:// (默认 9200),但访问时需要密码。
使用 Curl 测试:
# 注意:这里是 http:// 不是 https://
# 必须带上 -u 参数提供用户名密码,否则报 401
curl -u elastic:您的密码 http://localhost:9200/_cluster/health
- 如果去掉
-u:返回401 Unauthorized(认证生效了)。 - 如果抓包:可以看到
elastic:您的密码是明文显示的 (Base64 编码,极易解码)。
Java 客户端配置:
// 1. 不需要配置 SSLContext,不需要加载证书
// 2. 只需要配置基本的用户名密码
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials("elastic", "您的密码")
);
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http")) // 注意这里是 "http"
.setHttpClientConfigCallback(httpClientBuilder ->
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
);
RestHighLevelClient client = new RestHighLevelClient(builder);
📊 三种安全模式对比
为了严谨,我们总结一下 ES 的三种常见安全配置状态:
| 模式 | 配置项 | 安全性 | 适用场景 | 风险 |
|---|---|---|---|---|
| 裸奔模式 | xpack.security.enabled: false |
无 (无认证,无加密) | 本地单机开发测试 | 任何人可删库,数据明文 |
| 明文认证模式 (您问的) |
xpack.security.enabled: truehttp.ssl.enabled: false |
中 (有认证,无加密) | 严格隔离的内网、本机调试 | 密码易被窃听,内网中间人攻击 |
| 全副武装模式 (推荐) |
xpack.security.enabled: truehttp.ssl.enabled: true |
高 (有认证,有加密) | 所有生产环境 | 无明显风险 (需管理证书) |
总结
要实现“开启认证但不开启 HTTPS”:
- 保持
xpack.security.enabled: true。 - 设置
xpack.security.http.ssl.enabled: false。 - 客户端连接时使用
http://协议,并携带用户名密码。
再次提醒:除非您非常清楚自己在做什么(例如仅在 localhost 调试),否则请务必开启 HTTPS。
更多推荐
所有评论(0)