Redis(90)如何配置Redis的身份验证?

作者:Victor356日期:2025/10/29

配置Redis的身份验证是保护Redis实例安全的重要步骤。Redis提供了多种身份验证机制,包括简单的密码认证和更复杂的ACL(访问控制列表)机制。以下是详细的配置步骤和代码示例。

1. 使用简单密码认证

配置文件配置

在Redis配置文件 (redis.conf) 中设置 requirepass 选项。

1# redis.conf
2requirepass yourpassword
3

命令行参数配置

启动Redis服务器时通过命令行参数设置:

1redis-server --requirepass yourpassword
2

客户端代码示例

使用Jedis Java客户端连接Redis并进行密码认证:

1import redis.clients.jedis.Jedis;
2
3public class RedisAuthExample {
4    public static void main(String[] args) {
5        Jedis jedis = new Jedis("localhost", 6379);
6
7        // 进行密码认证
8        jedis.auth("yourpassword");
9
10        // 测试连接
11        String response = jedis.ping();
12        System.out.println(response);  // 应该输出 "PONG"
13
14        jedis.close();
15    }
16}
17

2. 使用ACL(访问控制列表)

Redis 6.0及以上版本支持ACL(访问控制列表),可以创建不同的用户并授予不同的权限。

配置文件配置

在Redis配置文件 (redis.conf) 中设置用户和权限:

1# redis.conf
2
3# 启用默认用户,并允许所有命令
4user default on nopass ~* +@all
5
6# 创建一个只读用户
7user read_only_user on >readonlypassword ~* +@read
8
9# 创建一个只写用户
10user write_only_user on >writeonlypassword ~* +@write
11

客户端代码示例

使用Jedis Java客户端连接Redis并进行用户认证:

1import redis.clients.jedis.Jedis;
2
3public class RedisACLExample {
4    public static void main(String[] args) {
5        // 连接到Redis服务器
6        Jedis jedis = new Jedis("localhost", 6379);
7
8        // 认证为只读用户
9        jedis.auth("read_only_user", "readonlypassword");
10
11        // 尝试进行读取操作
12        String response = jedis.ping();
13        System.out.println(response);  // 应该输出 "PONG"
14
15        // 尝试写入操作(将会失败)
16        try {
17            jedis.set("key", "value");
18        } catch (Exception e) {
19            System.out.println("Write operation failed: " + e.getMessage());
20        }
21
22        jedis.close();
23    }
24}
25

3. 动态设置身份验证

在运行时可以通过Redis命令动态设置和更新密码认证。

设置密码

可以通过 CONFIG SET 命令设置或更新密码:

1import redis.clients.jedis.Jedis;
2
3public class RedisDynamicAuthExample {
4    public static void main(String[] args) {
5        Jedis jedis = new Jedis("localhost", 6379);
6
7        // 设置密码
8        jedis.configSet("requirepass", "newpassword");
9
10        // 进行密码认证
11        jedis.auth("newpassword");
12
13        // 测试连接
14        String response = jedis.ping();
15        System.out.println(response);  // 应该输出 "PONG"
16
17        jedis.close();
18    }
19}
20

更新ACL用户

可以通过 ACL SETUSER 命令动态管理用户和权限。例如,创建新用户或修改现有用户:

1import redis.clients.jedis.Jedis;
2
3public class RedisDynamicACLExample {
4    public static void main(String[] args) {
5        Jedis jedis = new Jedis("localhost", 6379);
6
7        // 创建或更新用户 read_only_user
8        jedis.aclSetUser("read_only_user", "on", ">" + "readonlypassword", "~*", "+@read");
9
10        // 认证为新用户
11        jedis.auth("read_only_user", "readonlypassword");
12
13        // 测试连接
14        String response = jedis.ping();
15        System.out.println(response);  // 应该输出 "PONG"
16
17        jedis.close();
18    }
19}
20

4. 使用SSL/TLS加密认证

从Redis 6.0开始,Redis支持使用SSL/TLS加密通信,进一步提高安全性。

生成自签名证书

生成自签名证书:

1# 创建私钥
2openssl genrsa -out redis.key 2048
3
4# 创建证书签名请求(CSR)
5openssl req -new -key redis.key -out redis.csr
6
7# 自签名证书
8openssl x509 -req -days 365 -in redis.csr -signkey redis.key -out redis.crt
9

配置文件配置

在Redis配置文件 (redis.conf) 中设置SSL/TLS选项:

1# redis.conf
2tls-cert-file /path/to/redis.crt
3tls-key-file /path/to/redis.key
4tls-ca-cert-file /path/to/ca.crt
5tls-port 6379
6port 0
7

客户端代码示例

使用Jedis Java客户端连接Redis并使用SSL/TLS:

1import redis.clients.jedis.Jedis;
2import redis.clients.jedis.JedisShardInfo;
3
4public class RedisTLSExample {
5    public static void main(String[] args) {
6        // 设置Jedis连接信息,包括TLS
7        JedisShardInfo shardInfo = new JedisShardInfo("localhost", 6379, true);
8        shardInfo.setPassword("yourpassword");
9        shardInfo.setSsl(true);
10        shardInfo.setSslSocketFactory(SSLSocketFactory.getDefault());
11
12        try (Jedis jedis = new Jedis(shardInfo)) {
13            // 测试连接
14            String response = jedis.ping();
15            System.out.println(response);  // 应该输出 "PONG"
16        }
17    }
18}
19

总结

Redis提供了多种身份验证机制,包括简单的密码认证和更复杂的ACL(访问控制列表)。通过合理配置这些安全特性,可以有效保护Redis实例,防止未经授权的访问。使用SSL/TLS加密通信可以进一步提高安全性。上述示例代码展示了如何在实际应用中实现这些安全机制。


Redis(90)如何配置Redis的身份验证?》 是转载文章,点击查看原文


相关推荐


Python 的内置函数 dict
IMPYLH2025/10/26

Python 内建函数列表 > Python 的内置函数 dict Python 的内置函数 dict 是用于创建字典对象的构造函数。字典是 Python 中最常用的数据结构之一,它采用键值对(key-value pairs)的形式存储数据,提供高效的数据查询能力。 class dict(**kwarg): ''' 类型转换为 dict :param kwarg: 键值对 :return: 转换为 dict 后的值 ''' 示例 person


AWS EKS 计算资源自动扩缩之Karpenter[AWS 海外区]
thinktik2025/10/24

Karpenter是一个为Kubernetes构建的开源自动扩缩容项目。它提高了Kubernetes应用程序的可用性,而无需手动或过度配置计算资源。 Karpenter旨在通过观察不可调度的Pod的聚合资源请求并做出启动和终止节点的决策,以最大限度地减少调度延迟,从而在几秒钟内(而不是几分钟)提供合适的计算资源来满足您的应用程序的需求。 karpenter可以替代传统的cluster-autoscaler,我们可以参考karpenter进行安装,选择Migrating from Cluster


Redis(76)Redis作为缓存的常见使用场景有哪些?
Victor3562025/10/22

Redis作为缓存的常见使用场景包括数据库查询缓存、会话管理、分布式锁、缓存热点数据、计数器和限流等。以下是详细的说明和代码示例: 1. 数据库查询缓存 数据库查询缓存是最常见的使用场景之一,缓存数据库查询结果以减少直接访问数据库的频率,从而提升系统性能。 示例代码: import redis.clients.jedis.Jedis; import com.fasterxml.jackson.databind.ObjectMapper; public class DatabaseQueryCa


Redis(74)Redis分布式锁与ZooKeeper分布式锁有何区别?
Victor3562025/10/21

Redis和ZooKeeper都是用来实现分布式锁的常用工具,但它们在实现机制、性能、可用性和一致性方面有显著区别。以下是详细的比较和结合代码的解释。 1. 实现机制 Redis分布式锁: 实现机制:基于简单的字符串操作,通过SET NX PX命令来实现锁,使用Lua脚本确保原子性。Redis是一个内存数据库,操作速度非常快。 一致性:Redis提供的是最终一致性,不能完全保证严格的强一致性。 可用性:Redis是AP系统(高可用性和分区容错性),可能在网络分区时提供较高的可用性,但在一致性方


Qt的QT_QPA_EGLFS_INTEGRATION环境变量浅解
华丽的周遭2025/10/20

在Qt嵌入式开发中,环境变量QT_QPA_EGLFS_INTEGRATION用于控制 ​​EGLFS(Embedded GL Framework for Systems)平台插件​​ 与底层显示子系统的集成方式。 它主要适用于基于OpenGL ES的无头(Headless)或嵌入式设备场景(如无X11/Wayland的嵌入式Linux系统),尤其在ZynqMP这类SoC方案中,常用于配置Qt应用的图形渲染与显示输出。 ​​一、核心作用​​ EGLFS是Qt提供的轻量级平台插件,直接通过EG


【粉丝福利社】从算筹到卫星导航:这本书藏着人类文明的进化密码
愚公搬代码2025/10/18

💎【行业认证·权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域的技术布道者 🏆【荣誉殿堂】 🎖 连续三年蝉联"华为云十佳博主"(2022-2024) 🎖 双冠加冕CSDN"年度博客之星TOP2"(2022&2023) 🎖 十余个技术社区年度杰出贡献奖得主 📚【知识宝库】 覆盖


Git提交后追加修改操作指南
字节逆旅2025/10/17

在开发时经常会遇到在git commit后,又把文件修改了一下的情况,此时要如何操作才能避免提交多个commit呢? 前面你已经走了这两步: git add . git commit -m "fix:修改了一个bug" 此时你提交的代码还在本地暂存区,然后你又发现没改完,又有新修改文件产生。 接下来,你的操作步骤应该是这样的: 基本步骤 将修改的文件添加到暂存区(Staging Area) 这里还是和你平时提交前一样,使用 git add 命令。 # 添加某个特定文件 git add <


前端必备:JS数组与对象完全指南,看完秒变数据处理高手!
良山有风来2025/10/16

一、为什么你的代码总是处理不好数据? 你是不是经常遇到这样的场景: 从后端拿到一堆数据,却不知道如何快速筛选出需要的内容 想要对数据进行排序、过滤、转换,却写出一堆复杂的for循环 面对嵌套的对象结构,感觉像是在走迷宫,总是找不到想要的数据 别担心,这都不是你的问题!很多前端开发者都在数据处理上栽过跟头。今天这篇文章,就带你彻底掌握JavaScript中最核心的两种数据结构:数组和对象。 读完本文,你将获得: 数组和对象的完整操作方法大全 实际开发中最常用的数据处理技巧 避免常见坑点的最佳


云原生-k8s
dalianwawatou2025/10/14

k8s的优缺点 优点:部署应用方便,具有高可用、负载均衡功能,能自动扩容、对Pod进行监控 缺点:需要很多机器,成本投入大 安装 服务器准备 首先安装三台虚拟机,一台主节点,两台从节点,规划如下 操作系统:Rocky_linux9.6 配置: 4核cpu +/8Gib 内存/20G磁盘 网卡模式:NAT 角色IP主机名主节点master192.168.52.131k8s1从节点node1192.168.52.132k8s2从节点node2192.168.52.133k8s3


HTTPS 真的牢不可破吗?—— 中间人攻击与安全机制解析
程序员三明治2025/10/13

👨‍💻程序员三明治:个人主页 🔥 个人专栏: 《设计模式精解》 《重学数据结构》 🤞先做到 再看见! 在实际应用中,我们可能会遇到这样的情况:当客户端通过浏览器向服务端发起 HTTPS 请求时,请求被“假基站”劫持并转发至“中间人服务器”。于是,客户端实际上是与中间人完成了 TLS 握手,而中间人再与真正的服务端建立 TLS 连接。具体流程如下: 具体过程如下: 客户端发起 HTTPS 连接请求,被假基站重定向至中间人服务器。中间人随后向真实服务端发起 H

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0