目前遇到一个问题,即我通过 elasticsearch-client 与 elasticsearch 通信的后台工作人员在 Faraday 内部遇到 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 perform 方法,但仍然无法重现。
如果这完全相关,我正在使用托管的 AWS 2.3 Elasticsearch。
任何正确方向的帮助或指导将不胜感激,我很乐意根据需要附上尽可能多的信息。