第20章 Memcached 的 TLS 支持
TLS 支持 本文档尚不完整,但 memcached 的 TLS 支持功能已趋于稳定。关于设计思路及部分实现细节,请查阅仓库中的 doc/tls.txt 文件。
快速入门 Memcached 1.5.13 及以上版本支持通过 TLS 进行身份验证和数据加密。这需要满足以下条件: OpenSSL 1.1.1 或更高版本 支持 TLS 通信的 memcached 客户端 使用 ./configure --enable-tls 编译生成的服务器
何时使用? 加密:要求客户端与服务器之间的数据传输必须加密。 身份验证:要求服务器和客户端相互验证身份。 数据完整性:确保数据在客户端与服务器传输过程中未被篡改或修改。
如何使用? 获取最新版本的 memcached。 通过 ./configure --enable-tls && make && make test && sudo make install 进行构建。 获取有效的证书和密钥。 使用常规的启动选项,并添加 -Z -o ssl_chain_cert=/home/user/cert,ssl_key=/home/user/key。 -Z(或 --enable-ssl)用于启用 TLS,ssl_chain_cert 和 ssl_key 分别用于指定证书和密钥。 如果服务器启动遇到问题,可使用详细日志模式(memcached -v)打印错误和警告信息。 如果没有报错,说明指定的所有 TCP 接口均已支持 TLS。 你可以使用 OpenSSL 的 s_client 快速测试服务器: $ openssl s_client -connect host:port
其他选项 使用 memcached -h 可以查看所有可用选项。 如需指定不同的私钥格式,可使用 -o ssl_keyformat=。默认格式为 PEM (1)。该值必须为整数,更多详情请参考 OpenSSL 证书格式说明。 如需更改对等方证书验证模式,使用 -o ssl_verify_mode=。默认值为 0(None)。有效值为 0(None)、1(Request)、2(Require)或 3(Once)。更多详情请参考 OpenSSL 验证模式说明。 如需限制支持的密码套件,使用 -o ssl_ciphers=。有效选项请参考 OpenSSL 密码套件名称说明。 如需要提供 CA 证书,使用 -o ssl_ca_cert=。仅接受 PEM 文件格式。 如果你使旧的服务证书失效并获取了新证书,且需要 memcached 使用新证书,无需重启服务器。 连接服务器并执行 refresh_certs 命令。 Memcached 会重新加载新证书(证书名称和路径必须与原证书相同),新连接将使用新证书。 现有连接将继续使用由旧证书生成的会话密钥。
你可以选择让特定接口(例如 localhost 上的明文传输)不使用 TLS。这可以通过 -l 或 --listen= 指定。在不需要 TLS 的接口前添加 notls: 前缀。
例如:-l notls:
监控 你可以提高服务器的详细日志级别,以打印详细的错误/警告信息。 stats settings 命令将显示当前的 TLS 设置,这些设置以 ssl_ 为前缀。 stats 命令会打印 time_since_server_cert_refresh,即自服务器加载证书以来经过的秒数。这在需要刷新证书时非常有用。
如何调优? 当前的 TLS 实现会将大消息(默认超过 16K)拆分并分块发送。 可以通过 --o ssl_wbuf_size= 选项提高此限制。单位为 KB,默认值为 16KB。 此缓冲区在每个工作线程级别分配,因此你可以通过 ssl_wbuf_size * 工作线程数量 来计算内存预算(单位为 KB)。
性能 待定
会话恢复 待办:参考 memcached -h
快速笔记 关于设计思路和实现细节,请参考 doc/tls.txt。 关于启动参数,请参考 memcached -h。 运行 ./configure --enable-tls 以编译该功能。
热重启 闪存