elixir:redix包在centos 7上不支持ssl

cgvd09ve  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(414)

我用stunnel设置redis5.x来接受来自客户端的ssl连接。设置非常简单,我只是按照redis站点的说明进行。
它类似于:stunnel通过ssl连接接受客户端请求,并通过非ssl连接转发到redis。
在我的两台都运行macosx的dev计算机上,使用ruby-gem-redis和elixir-redix库可以很好地进行安装。
命令如下:
Ruby:

redis = Redis.new(host: "127.0.0.1", port: 6380, db: 3, ssl: true, password: 'SomeSecret :)')

redis.ping

万能药:

{:ok, conn} = Redix.start_link( host: "127.0.0.1", port: 6380, ssl: true, password: "SomeSecret :)", socket_opts: [verify: :verify_none])

Redix.command(conn, ["PING"])

所以我知道redis+stunnel设置在两台不同的mac机器上运行得很好。
当我将相同的设置部署到运行centos 7的linux机器上时,ruby客户机仍然可以正常工作。
然而,在centos 7上,elixir redix停止工作,我得到一个错误:

{:error, %Redix.ConnectionError{reason: :closed}}

对我来说,这没有任何意义,因为cent操作系统的stunnel+redis设置与我的2台dev mac机器完全相同。ruby客户端在所有3台机器上都运行良好:2台mac和1台centos。
不过,elixir redix只能在2台mac电脑上运行,而不能在cent操作系统上运行。相同的设置,相同的代码。

问:为什么elixir redix ssl代码不能在centos上工作,而在mac上工作?

(相同的设置,相同的代码)
更多信息:在mac机和centos机上,我有:

Erlang/OTP 22 [erts-10.4.3] [source] [64-bit]
Elixir 1.9.0 (compiled with Erlang/OTP 20)

我刚刚发现在centos上,在日志中,有一个错误:

TLS client: In state hello at tls_handshake.erl:182 generated CLIENT ALERT: Fatal - Protocol Version

也许这就是问题所在。但我在mac电脑上看不到。

s1ag04yj

s1ag04yj1#

给定错误消息中的行号,我们可以看到错误来自这里。因此,如果 tls_record:is_acceptable_version 返回false,这意味着stunnel建议使用elixir客户端不想使用的tls版本。
您可以通过在 Redix.start_link 电话:

IO.inspect(:ssl.versions())

您可以使用wireshark并捕获到loopback接口上的6380端口的流量,以查看stunnel想要使用哪个tls版本—这是“server hello”消息中的一个字段。

相关问题