我正在尝试使用 HiRedis API 执行与 Redis 服务器的 TLS 连接,该服务器位于可以执行 TLS 终止的设备的前面。我的项目需要通过 Internet 将客户数据发送到托管在云中的 Redis 服务器。我需要使用 TLS 保护数据。
我看到 HiRedis 对 TLS 连接提供了一些有限的支持。我创建了一个原型来试用 TLS 代码。
我有一台位于 AWS eu-west-1 的服务器机器。我已经通过各种方式确认我可以使用 HiRedis 0.14.0 在端口 6379 上插入记录。
我在 eu-west-1 有一个 AWS 网络负载均衡器。我有一个带有私有证书的端口 443,该证书将目标组连接到 Redis 服务器的端口 6379。我还打开了端口 6379,将端口 6379 连接到 Redis 服务器。我已经确认后一个连接确实使用hiredis“示例”编译程序工作。
我在 us-east-1 中有一个 AWS 云实例,用作我的客户端机器。我已经安装了hiredis 0.14.0 并使用OpenSSL 库编译了示例。我已将私有证书和私有密钥安装/复制到这台机器上。如上所述,我可以在端口 6379 上使用“示例”程序并在 Redis 服务器上创建示例数据。
但是,在尝试 TLS 连接时,我得到以下信息:
[machine]# example-ssl <to-redis-host> 443 <cert_file> <private_key_file>
ST(0x10). before/connect initialization. R(0x1)U
ST(0x1001). before/connect initialization. R(0x1)U
ST(0x1001). SSLv2/v3 write client hello A. R(0x1)U
ST(0x1001). SSLv3 read server hello A. R(0x1)U
ST(0x4008). error. R(0x230)F
ST(0x1002). error. R(0xffffffff)U
ST(0x1002). error. R(0xffffffff)U
Couldn't initialize SSL!
Error: SSL_connect() failed
示例 SSL 文件可以在这里找到: https ://github.com/redis/hiredis/blob/master/examples/example-ssl.c
我的 HiRedis 版本有 sslio.c,但它似乎在 master 分支中重命名为 ssl.c: https ://github.com/redis/hiredis/blob/master/ssl.c
我如何得到这份工作?
当我打字时,我想到我应该使用客户端证书和私钥(不要使用服务器证书和密钥)。我尝试了https://gist.github.com/mtigas/952344中的说明来生成客户端证书和密钥,但我仍然无法让 example-ssl 工作。