Ruby: SSL_connect SYSTEMAUFRUF zurückgegebenen=5 errno=0 state=unknown-Zustand sind (OpenSSL::SSL::SSLError)

Varianten dieser Fehler gepostet wurden, alle über dem Platz, aber keine der Lösungen scheint zu funktionieren für mich.

Ich bin mit ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] und
OpenSSL 1.0.1k 8 Jan 2015.

Den folgenden Befehl ausführen:

require 'net/http'
require 'openssl'

url = 'https://ntpnow.com/'
uri   = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1
http.get(uri.path)

Dumps dieser trace:

/usr/local/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=unknown state (OpenSSL::SSL::SSLError)
    from /usr/local/lib/ruby/2.2.0/net/http.rb:923:in `block in connect'
    from /usr/local/lib/ruby/2.2.0/timeout.rb:74:in `timeout'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:923:in `connect'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:852:in `start'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:1375:in `request'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:1133:in `get'
    from bin/ntpnow_test.rb:9:in `<main>'

Navigieren Sie zu der Website von einem browser angezeigt wird, ist das Zertifikat scheint in Ordnung zu sein. Curl auch nicht produzieren keine Fehler.

Zusätzlich, wenn ich versuche mit Ruby 1.9.3, es scheint zu funktionieren. Allerdings bin ich nicht geneigt, ein downgrade Ruby-Versionen, wenn ich eine Lösung finden können.

Können Sie mir bitte sagen, was genau geändert, das dieses problem verursacht?

UPDATE:

Steffen ' s Antwort und Erklärung unten korrekt ist. Für zukünftige Referenz, hier ist, wie um dieses problem zu diagnostizieren.

  1. Zunächst ermitteln, welche Verschlüsselungen unterstützt der server. Führen Sie den Befehl nmap --script ssl-enum-ciphers ntpnow.com. Suchen Sie den Abschnitt listet die unterstützten Chiffren.
  2. Bestimmen Sie die Ziffer-Taste, die Sie zu Durchlaufen haben, als Teil der http.ciphers. Führen Sie openssl ciphers. Dieser spuckt heraus eine : getrennte Liste von Chiffren. Finden Sie das passende Ergebnis aus Schritt 1.

InformationsquelleAutor prajo | 2015-11-06

Schreibe einen Kommentar