Elixir: Redix包在CentOS 7上不能与SSL一起工作。

问题描述 投票:0回答:1

我设置了Redis 5.x和stunnel来接受来自客户端的SSL连接。设置非常简单,我只是按照Redis网站上的说明进行设置。

它是这样的:stunnel通过SSL连接接受客户端请求,并通过非SSL连接转发到Redis。

在我的两台运行Mac OS X的开发电脑上,使用Ruby gem redis和Elixir Redix库,这个设置工作正常。

命令如下。

Ruby: Elixir:

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

redis.ping

Elixir:

{: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}}

对我来说,这没有任何意义 因为CentOS的stunnel+redis设置 和我的两台Mac开发机完全一样。而且Ruby客户端在3台机器上都能正常工作:2台Mac和1台CentOS。

但是。Elixir Redix只在2台Mac机上工作,但在Cent OS上却不能工作。. 同样的设置,同样的代码。

问题:为什么Elixir Redix SSL代码在CentOS上不能使用,而在Mac上却可以使用?为什么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机上没有看到。

ssl redis elixir stunnel redix
1个回答
1
投票

根据错误信息中的行号,我们可以看出错误来自于 此处. 因此,这个错误是我们得到的,如果 tls_record:is_acceptable_version 返回 false,这意味着 stunnel 建议使用 Elixir 客户端不想使用的 TLS 版本。

你可以通过在 Redix.start_link 调用。

IO.inspect(:ssl.versions())

你可以用Wireshark 捕捉到环回接口6380端口的流量 看看stunnel想使用哪个TLS版本

© www.soinside.com 2019 - 2024. All rights reserved.