Valkey 支持 SSL/TLS 作为可选功能,需要在编译时启用。
开始
构建
要构建支持 TLS 的版本,您需要 OpenSSL 开发库(例如 Debian/Ubuntu 上的 libssl-dev
)。
使用以下命令构建 Valkey
make BUILD_TLS=yes
测试
要运行支持 TLS 的 Valkey 测试套件,您需要 TCL 的 TLS 支持(即 Debian/Ubuntu 上的 tcl-tls
软件包)。
-
运行
./utils/gen-test-certs.sh
以生成根 CA 和服务器证书。 -
运行
./runtest --tls
或./runtest-cluster --tls
以在 TLS 模式下运行 Valkey 和 Valkey 集群测试。
手动运行
要手动以 TLS 模式运行 Valkey 服务器(假设已调用 gen-test-certs.sh
以便示例证书/密钥可用)
./src/valkey-server --tls-port 6379 --port 0 \
--tls-cert-file ./tests/tls/valkey.crt \
--tls-key-file ./tests/tls/valkey.key \
--tls-ca-cert-file ./tests/tls/ca.crt
使用 valkey-cli
连接到此 Valkey 服务器
./src/valkey-cli --tls \
--cert ./tests/tls/valkey.crt \
--key ./tests/tls/valkey.key \
--cacert ./tests/tls/ca.crt
证书配置
为了支持 TLS,Valkey 必须配置 X.509 证书和私钥。此外,需要指定一个 CA 证书包文件或路径,作为验证证书时的信任根。为了支持基于 DH 的密码,也可以配置 DH 参数文件。例如
tls-cert-file /path/to/valkey.crt
tls-key-file /path/to/valkey.key
tls-ca-cert-file /path/to/ca.crt
tls-dh-params-file /path/to/valkey.dh
TLS 监听端口
tls-port
配置指令允许在指定端口上接受 SSL/TLS 连接。这**除了**在 port
上监听 TCP 连接之外,因此可以同时使用 TLS 和非 TLS 连接在不同端口上访问 Valkey。
您可以指定 port 0
完全禁用非 TLS 端口。要在默认 Valkey 端口上仅启用 TLS,请使用
port 0
tls-port 6379
客户端证书认证
默认情况下,Valkey 使用相互 TLS 并要求客户端使用有效证书进行认证(根据 ca-cert-file
或 ca-cert-dir
指定的受信任根 CA 进行认证)。
您可以使用 tls-auth-clients no
来禁用客户端认证。
复制
Valkey 主服务器以相同的方式处理连接客户端和副本服务器,因此上述 tls-port
和 tls-auth-clients
指令也适用于复制链接。
在副本服务器端,需要指定 tls-replication yes
以便对到主服务器的出站连接使用 TLS。
集群
使用 Valkey 集群时,请使用 tls-cluster yes
以启用集群总线和节点间连接的 TLS。
Sentinel
Sentinel 继承其网络配置自 Valkey 的通用配置,因此上述所有内容也适用于 Sentinel。
当连接到主服务器时,Sentinel 将使用 tls-replication
指令来确定是否需要 TLS 或非 TLS 连接。
此外,同样的 tls-replication
指令将决定 Sentinel 接受来自其他 Sentinel 连接的端口是否也支持 TLS。也就是说,当且仅当 tls-replication
启用时,Sentinel 才会配置 tls-port
。
额外配置
提供额外的 TLS 配置,用于控制 TLS 协议版本、密码和密码套件等选择。有关更多信息,请查阅自文档化的 valkey.conf
。
性能考量
TLS 在通信堆栈中增加了一层,由于对 SSL 连接的写入/读取、加密/解密和完整性检查,会带来额外的开销。因此,使用 TLS 会导致每个 Valkey 实例的可实现吞吐量降低。