Ruby: SSL_connect SYSCALL hat = 5 zurückgegeben errno = 0 state = unknown state (OpenSSL :: SSL :: SSLError)

Varianten dieses Fehlers wurden überall veröffentlicht, aber keine der Lösungen scheint für mich zu funktionieren.

Ich renneruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] undOpenSSL 1.0.1k 8 Jan 2015.

Führen Sie Folgendes aus:

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)

Zeichnet diesen 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>'

Wenn Sie über einen Browser zur Site navigieren, wird angezeigt, dass das Zertifikat in Ordnung zu sein scheint. Curl erzeugt auch keine Fehler.

Zusätzlich scheint es zu funktionieren, wenn ich es mit Ruby 1.9.3 versuche. Ich bin jedoch nicht geneigt, Ruby-Versionen herunterzustufen, wenn ich eine Lösung finden kann.

annst du mir bitte sagen, was genau das geändert hat, was dieses Problem verursach

AKTUALISIEREN

Steffen's Antwort und Erklärung unten ist richtig. Zum späteren Nachschlagen lesen Sie hier, wie Sie dieses Problem diagnostizieren können.

Bestimmen Sie zunächst, welche Verschlüsselungen der Server unterstützt. Führen Sie den Befehlnmap --script ssl-enum-ciphers ntpnow.com. Suchen Sie den Abschnitt, in dem die unterstützten Chiffren aufgelistet sind. Bestimmen Sie den Chiffrierschlüssel, den Sie als Teil von @ übergeben müssehttp.ciphers. Laufopenssl ciphers. Dies wird ein @ ausspuck: begrenzte Liste von Chiffren. Suchen Sie diejenige, die dem Ergebnis aus Schritt 1 entspricht.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage