2016-08-09 2 views
0

Derzeit läuft ein Problem, bei dem meine Hintergrundarbeiter, die über elasticsearch-client mit elasticsearch kommunizieren, innerhalb von Faraday auf SSL-Fehler stoßen.Faraday :: SSLError für Elasticsearch

Der Fehler ist dies:

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

Die Konfiguration arbeitet einen Teil der Zeit in Ordnung (um ~ 50%), und es hat nie für mich in einer Konsolensitzung fehlgeschlagen.

Die Spur des Befehls ist dies: curl -X GET 'https://<host>/_alias/models_write?pretty

Der Client Config ist dies

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 

Wie Sie mich ausdrücklich die ssl Version TSLv1_2 gesetzt zu sehen, aber immer noch einen SSLv3 Fehler.

Dachte vielleicht war es ein Race Condition Problem. So lief ein Skript, das ungefähr 10 Prozesse mit jeweils 50 Threads hervorbrachte und die Methode sidekiq perform anrief und immer noch nicht in der Lage war zu reproduzieren.

Ich verwende die verwaltete AWS 2.3 Elasticsearch, wenn das überhaupt relevant ist.

Jede Hilfe oder Anleitung in die richtige Richtung würde sehr geschätzt werden, würde ich glücklich sein, so viele Informationen wie nötig anhängen.

Antwort

0

Ich habe es herausgefunden. Das Problem bestand darin, dass der Elasticsearch-Ruby-Edelstein in einem http-Adapter automatisch geladen wurde, den er erkannte, wenn keiner angegeben wurde. Der in meiner Konsole verwendete war nicht derjenige, der automatisch in sidekiq geladen wurde.

Der sidekiq-Job verwendete den HTTPClient-Adapter, der die SSL-Version nicht berücksichtigte. Also habe ich diesen Fehler bekommen. Nach dem expliziten Definieren des Faraday-Adapters funktionierte es.

Verwandte Themen