2014-09-12 3 views
20

Der folgende Code gibt den folgenden Fehler: OpenSSL :: SSL :: SSLError: SSL_connect SYSCALL zurückgegeben = 5 errno = 0 state = SSLv3 lesen Server hallo EinOpenSSL :: SSL :: SSLError: SSL_connect SYSCALL zurückgegeben = 5 errno = 0 state = SSLv3 Server lesen Hallo A

require 'net/https' 
uri = URI.parse("https://<server>.com") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.ssl_version = 'SSLv3' 
http.get(uri.request_uri) 

Jede Idee, warum? Ich habe alles versucht, was in allen anderen Fragen erwähnt wurde, immer noch kein Glück.

  • Rubin 1.9.3p484 (2013.11.22 Revision 43786) [x86_64-darwin13.3.0]
  • OpenSSL 0.9.8y 5 Feb 2013

Update I

versucht, die folgenden:

  • Rubin 2.0.0p353 (2013.11.22 Revision 43784) [x86_64-darwin13.3.0]
  • OpenSSL 1.0.1i 6. August 2014

Update II

  • Zwangs ssl_version zu: TLSv1_2

Noch kein Glück.

Update-III

Okay, hier ist der endgültige Code - dank Steffen (siehe unten beantworten):

require 'net/https' 
uri = URI.parse("https://<server>.com") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.ssl_version = :TLSv1 
http.ciphers = ['RC4-SHA'] 
http.get(uri.request_uri) 

Ich bezweifle, dass meine Frage an alle anderen relevant sein wird, da es ähnliche war zu einem remote falsch konfigurierten Server.

+2

es war nützlich für mich :) – davispuh

+0

Auch auf/r/asknetsec https://www.reddit.com/r/AskNetse c/comments/64ulgg/what_would_be_a_secure_ssl_configuration_for_the/ – Dorian

Antwort

25

Dies ist ein Problem am Serverstandort. Es sieht so aus, als ob der Server ausschließlich TLS 1.2 akzeptiert und nicht das übliche Verhalten zeigt, wenn der Client etwas weniger verlangt (wie das Herunterstufen oder Senden der SSL-Warnung), sondern nur die Verbindung schließt.

TLS 1.2 wird von OpenSSL 0.9.8 nicht unterstützt und Ihr Code erzwingt SSLv3. Sie erhalten TLS 1.2 nur beim Upgrade auf OpenSSL 1.0.1.

Einige Browser können auch keine Verbindung zu diesem Server herstellen, auch wenn sie Möglichkeiten haben, solche defekten Server zu umgehen. Aber während Firefox nur versucht, die Verbindung zu einer niedrigeren SSL-Version herunterzustufen (was oft hilft), schafft es Chrome, sich mit TLS 1.2 zu verbinden.

Edit: Ich habe das Problem weiter analysiert und jetzt kann ich keine Verbindung mit TLS1.2 mehr bekommen, aber ich kann eine Verbindung mit TLS1.0 oder SSL3.0 bekommen, aber nur, wenn die Chiffren hart RC4 codiert ist -SHA. Ich habe andere wie AES128-SHA oder DES-CBC3-SHA versucht und sie funktionieren nicht. So, während es sieht aus wie ein wirklich verkorkste System Einstellung explizit

http.ssl_version = 'TLSv1'  -- or SSLv3, but TLSv1 is better 
http.ssl_cipher = 'rc4-sha' 

sollte funktionieren. Ich bin kein Ruby-Benutzer, also könnte die genaue Syntax abweichen, aber ich habe mit OpenSSL s_client getestet.

+0

Hey, danke für deine Antwort! Ich habe die obige Frage mit weiteren Informationen aktualisiert, basierend auf Ihrem Feedback. – Hesham

+0

Siehe Bearbeiten - sieht so aus, als könnten Sie erfolgreich sein, indem Sie RC4-SHA als Chiffre erzwingen. –

+0

ES ARBEITET! Vielen Dank für deine Hilfe! Hier ist, was ich getan habe: 'http.ssl_version =: TLSv1' und' http.cipher = ['RC4-SHA'] '. Danke noch einmal! – Hesham

0

Lösung ist ein Upgrade auf openssl 1.0.2g-1​ubuntu4.6 (von 1.0.1f-1​ubuntu2.21) (z. B. von cedar-14 zu heroku-16 Stapel).

heroku stack:set heroku-16 -a your-app 

Und in app.json:

{ 
    ... 
    "stack": "heroku-16", 
    ... 
} 
+0

Jetzt bekomme ich 'SSL_connect SYSCALL zurückgegeben = 5 errno = 0 Zustand = SSLv2/v3 Server Hallo A 'weniger oft zu lesen, aber immer noch passiert – Dorian

-1

Für Fastlane diese versuchen,

brew install ruby 
gem install fastlane 

Siehe reference

Verwandte Themen