带有 TLS 的 Redis 6

wil*_*mes 5 ssl redis tls1.2

我正在尝试让 Redis 6(在编译期间启用 TLS,编译后测试成功)正常工作。我正在使用 Lets Encrypt 证书和以下配置:

tls-port 63790
tls-cert-file /etc/letsencrypt/live/myserver.net/cert.pem
tls-key-file /etc/letsencrypt/live/myserver.net/privkey.pem
tls-ca-cert-dir /etc/letsencrypt/live/myserver.net/
tls-auth-clients no
tls-protocols "TLSv1.2 TLSv1.3"
Run Code Online (Sandbox Code Playgroud)

以及来自本地主机的客户端命令

redis-cli --tls --cert /etc/letsencrypt/live/myserver.net/cert.pem --key /etc/letsencrypt/live/myserver.net/privkey.pem --cacert /etc/letsencrypt/live/myserver.net/fullchain.pem -h myserver.net -p 63790 -a password
Run Code Online (Sandbox Code Playgroud)

警告:在命令行界面上使用带“-a”或“-u”选项的密码可能不安全。 无法连接到位于 myserver.net:63790 的 Redis:SSL_connect 失败:证书验证失败

这是 Redis 日志的输出: 接受客户端连接时出错:错误:14094418:SSL 例程:ssl3_read_bytes:tlsv1 警报未知 ca

当我使用具有相同证书的 openssl 客户端时,我能够连接并从 Redis 服务器获取 ping 回复

不管我是否改变

tls-ca-cert-dir /etc/letsencrypt/live/myserver.net/
Run Code Online (Sandbox Code Playgroud)

tls-ca-cert 
Run Code Online (Sandbox Code Playgroud)

在服务器端或 --cacert /etc/letsencrypt/live/myserver.net/fullchain.pem 到 chain.pem 在客户端我尝试了所有版本

tls-protocols ""
Run Code Online (Sandbox Code Playgroud)

并改变

tls-auth-clients no
Run Code Online (Sandbox Code Playgroud)

tls-auth-clients optional
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到同样的错误

OpenSSL版本是1.1.1 Redis版本是6.0.8 操作系统:Ubuntu 20.04

您能帮我找出 TLS 不起作用的原因吗?

谢谢

wil*_*mes 6

啊,解决了!我放错了 CA 链。我必须将从 LE 网站下载的根证书和中间证书链接到新文件中。对于有同样问题的人来说可能会很方便。