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