ruby-on-rails - Faraday::Elasticsearch 的 SSLError

标签 ruby-on-rails ruby ssl elasticsearch elasticsearch-ruby

目前遇到一个问题,我的后台工作人员通过 elasticsearch-client 与 elasticsearch 通信时在 Faraday 内部遇到 SSL 错误。

错误是这样的:

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

配置在某些时候(大约 ~50%)工作正常,并且在控制台 session 中对我来说从未失败。

命令的轨迹是这样的: 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 执行方法,但仍然无法重现。

如果相关的话,我正在使用托管的 AWS 2.3 Elasticsearch。

任何正确方向的帮助或指导将不胜感激,我很乐意根据需要附上尽可能多的信息。

最佳答案

想通了。问题是 elasticsearch-ruby gem 在一个 http 适配器中自动加载,如果没有指定,它会检测到。在我的控制台中使用的不是自动加载到 sidekiq 中的那个。

sidekiq 作业使用的是不符合 SSL 版本选项的 HTTPClient 适配器。因此我收到了这个错误。在明确定义法拉第适配器后,它起作用了。

关于ruby-on-rails - Faraday::Elasticsearch 的 SSLError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862093/

相关文章:

ruby-on-rails - rails 3.1,选择题考试,怎么设计?

ruby-on-rails - 有没有办法将自定义文件夹添加到 "partials path"?

ruby-on-rails - 如何将 Resque Web 与 Sinatra 应用程序一起使用

ruby - RAILS 4.0 中 Log4r 的未定义方法格式化程序

java - Handshaker.algorithmConstraints

ruby-on-rails - Ruby - 使用 SSL 连接并通过客户端证书进行身份验证 - sslv3 警报错误证书

ruby-on-rails - rails : How I can get yesterday's date?

ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章?

java - 无法从 jboss 调用 api.backblaze.com

ruby-on-rails - Spree.config是如何实现的?