Я настраиваю Redis 5.x с помощью stunnel для приема SSL-соединений от клиента. Настройка довольно проста, и я просто следую инструкциям с сайта Redis.
Это что-то вроде: stunnel принимает клиентские запросы через SSL-соединение и перенаправляет на Redis через не-SSL-соединение.
На двух моих компьютерах для разработчиков, работающих под управлением Mac OS X, установка отлично работает с Ruby gem redis и библиотекой Elixir Redix.
Команды следующие:
Рубин:
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.
Когда я развертываю ту же настройку на машине с Linux, на которой работает CentOS 7, клиент Ruby по-прежнему работает нормально.
Однако в CentOS 7 Elixir Redix перестает работать, и я получаю сообщение об ошибке:
{:error, %Redix.ConnectionError{reason: :closed}}
Для меня это не имеет никакого смысла, потому что в Cent OS установка stunnel + redis точно такая же, как и у моих компьютеров Mac с двумя разработчиками. И клиент Ruby хорошо работает на всех 3 машинах: 2 Mac и 1 CentOS.
Однако Elixir Redix работает только на двух компьютерах Mac, но не на ОС Cent. Та же установка, тот же код.
Вопрос: Почему SSL-код Elixir Redix не работает на 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.