Фарадей::SSLError для Elasticsearch

В настоящее время сталкиваюсь с проблемой, из-за которой мои фоновые работники, которые общаются с эластичным поиском через asticsearch-клиент, сталкиваются с ошибками SSL внутри Фарадея.

Ошибка заключается в следующем:

SSL_connect returned=1 errno=0 state=SSLv3 read server hello A: sslv3 alert handshake failure

Конфигурация иногда работает нормально (около ~50%), и она никогда не подводила меня во время сеансов консоли.

След команды выглядит так:curl -X GET 'https://<host>/_alias/models_write?pretty

Конфиг клиента это

Thread.current[:chewy_client] ||= begin
  client_configuration[:reload_on_failure] = true
  client_configuration[:reload_connections] = 30
  client_configuration[:sniffer_timeout] = 0.5
  client_configuration[:transport_options] ||= {}
  client_configuration[:transport_options][:ssl] = { :version => :TLSv1_2 }
  client_configuration[:transport_options][:headers] = { content_type: 'application/json' }
  client_configuration[:trace] = true
  client_configuration[:logger] = Rails.logger
  ::Elasticsearch::Client.new(client_configuration) do |f|
    f.request :aws_signers_v4,
              credentials: AWS::Core::CredentialProviders::DefaultProvider.new,
              service_name: 'es',
              region: ENV['ES_REGION'] || 'us-west-2'
  end
end

Как видите, я явно установил версию ssl на TSLv1_2, но все равно получаю ошибку SSLv3.

Подумал, может быть, это проблема гонки. Таким образом, был запущен скрипт, порождающий около 10 процессов по 50 потоков в каждом и вызывающий метод sidekiq execute внутри, который все еще не может воспроизвести.

Я использую управляемый AWS 2.3 Elasticsearch, если это вообще актуально.

Буду очень признателен за любую помощь или руководство в правильном направлении, я был бы рад приложить столько информации, сколько необходимо.

1 ответ

Догадаться. Проблема заключалась в том, что камень asticsearch-ruby автоматически загружается в адаптер http, который он обнаруживает, если он не указан. Тот, который использовался в моей консоли, не был автоматически загружен в sidekiq.

Задание sidekiq использовало адаптер HTTPClient, который не учитывал вариант версии SSL. Таким образом я получил эту ошибку. После явного определения адаптера Фарадея все заработало.

Другие вопросы по тегам