Redis,这个我们熟知的开源 Key-Value 数据库,自 2009 年由意大利开发者 Salvatore Sanfilippo 开始开发以来,已经发展成为一个通用的内存数据结构系统,广泛应用于各种程序中。Redis 的值(value)可以是字符串(String)、哈希(Map)、列表(list)、集合(sets)和有序集合(sorted sets)等类型,因此它也被称为数据结构服务器。
然而,在 Redis 的早期版本中,所有的通信都是未加密的,这意味着任何人都可以读取或修改在网络上发送的数据。这在许多情况下都是不可接受的,特别是当 Redis 实例需要通过互联网公开访问时。
为了解决这个问题,Redis 6.0 在 2020 年引入了对 TLS(传输层安全)的支持。TLS 是一种加密协议,用于在不安全的网络上保护通信。通过使用 TLS,Redis 可以确保数据在传输过程中的安全性,防止被窃听或篡改。
这是一个重要的里程碑,因为它使得 Redis 可以在更广泛的环境中使用,包括那些需要高级别安全性的环境。此外,TLS 的引入也使得 Redis 能够满足更严格的合规性要求,例如 PCI DSS 和 HIPAA。
通过 Redis 的 ACL 与 TLS 结合使用,可以提供以下安全保障:
首先,我们需要安装 Redis。在 Ubuntu 系统中,可以使用以下命令安装 Redis:
sudo apt-get update
sudo apt-get install redis-server
安装完成后,我们需要生成 TLS 证书。这可以通过 openssl 命令完成。首先,我们需要创建一个私钥:
openssl genrsa -out redis.key 2048
然后,我们使用这个私钥生成一个自签名证书:
openssl req -new -x509 -days 365 -key redis.key -out redis.crt
接下来,我们需要配置 Redis 以使用这些证书。打开 Redis 配置文件,通常位于 /etc/redis/redis.conf,然后添加以下行:
tls-port 6379
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
这里,我们设置 Redis 在 TLS 端口 6379 上监听,并指定了证书和私钥的路径。
最后,我们需要重启 Redis 以应用这些更改:
sudo service redis-server restart
现在,Redis 应该已经在 TLS 端口上运行,并使用我们提供的证书和私钥。你可以使用 redis-cli 工具测试这个设置:
redis-cli --tls --cert /path/to/redis.crt --key /path/to/redis.key
如果一切正常,你应该能够看到一个提示符,表示你已经成功连接到了 Redis 服务器。
当我们的应用程序与 Redis 服务器在不同的网络环境中,或者我们的数据非常敏感,需要在传输过程中进行加密。
下面是一个使用 Python 的 redis-py 库通过 TLS 连接到 Redis 服务器的示例代码:
import redis
from redis.connection import SSLConnection
pool = redis.ConnectionPool(
connection_class=SSLConnection,
host='your_redis_server',
port=6379,
ssl_keyfile='path_to_your_keyfile',
ssl_certfile='path_to_your_certfile',
ssl_cert_reqs='required',
ssl_ca_certs='path_to_your_ca_cert',
)
r = redis.Redis(connection_pool=pool)
r.set('foo', 'bar')
print(r.get('foo'))
在这个示例中,我们首先导入了 redis 库和 SSLConnection 类。然后,我们创建了一个连接池,其中包含了我们的 Redis 服务器的地址和端口,以及我们的 SSL 密钥文件、证书文件和 CA 证书的路径。最后,我们创建了一个 Redis 对象,并使用它来设置和获取一个键值对。
在使用 Redis with TLS 时,可能会遇到一些常见的问题。以下是一些可能的问题以及解决方案:
tls-port
,tls-cert-file
,tls-key-file
等参数。你需要检查你的配置文件,并确保所有的 TLS 相关参数都已正确设置。在之前的项目中,笔者也使用过第三方工具给 Redis 通信加密,例如 stunnel。不过从 Redis 6.0 版本开始,Redis 已经原生支持 TLS。这意味着你可以直接在 Redis 中启用 TLS,而无需使用任何第三方工具。这无疑是最方便、最高效的解决方案。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。