文档:TLS

Valkey 支持 SSL/TLS 作为可选功能,需要在编译时启用。

开始

构建

要构建支持 TLS 的版本,您需要 OpenSSL 开发库(例如 Debian/Ubuntu 上的 libssl-dev)。

使用以下命令构建 Valkey

make BUILD_TLS=yes

测试

要运行支持 TLS 的 Valkey 测试套件,您需要 TCL 的 TLS 支持(即 Debian/Ubuntu 上的 tcl-tls 软件包)。

  1. 运行 ./utils/gen-test-certs.sh 以生成根 CA 和服务器证书。

  2. 运行 ./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-fileca-cert-dir 指定的受信任根 CA 进行认证)。

您可以使用 tls-auth-clients no 来禁用客户端认证。

复制

Valkey 主服务器以相同的方式处理连接客户端和副本服务器,因此上述 tls-porttls-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 实例的可实现吞吐量降低。