Фарадей::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. Таким образом я получил эту ошибку. После явного определения адаптера Фарадея все заработало.