Server Name Indication Unterstützung in Net :: HTTP?
Frage
Ich versuche, Rubys Net::HTTP
Umsetzung der Arbeit mit SNI zu erhalten.
Sowohl mail.google.com und gmail.com live auf der gleichen IP-Adresse, so dass, wenn über SSL verbinden, der Google-Server muss wissen, welches Zertifikat verwenden soll. Standardmäßig gibt es das mail.google.com Zertifikat, das ein Problem ist, wenn Sie versuchen, Webfinger zu implementieren.
Webfinger Sie erfordert https://gmail.com/.well-known/host-meta
abzurufen die LRDD Informationen zu erhalten, aber aus Gründen der Sicherheit, es ist wichtig, die SSL-Zertifikat Informationen zu überprüfen.
Da Google das Standard-mail.google.com Zertifikat dient in diesem Fall nach oben, schlägt die SSL post_connection_check
. Die richtige Lösung wäre hier Server Name Indication für Net::HTTP
zu ermöglichen, aber es ist mir nicht klar, wie mit den Ruby-Bindings für OpenSSL, dass die Arbeit zu bekommen. Noch jemand eine Idee?
Sie sollten der Lage sein, das Problem, indem Sie sehen:
require 'open-uri'
open('https://gmail.com/.well-known/host-meta') { |f| f.read }
Ich habe auch einen Kern geschaffen, dass Exponate das Problem mit einer früheren Version von curl und OpenSSL:
Lösung
Für SNI Unterstützung benötigen Sie eine neuere OpenSSL-Release (0.9.8f mit --enable-tlsext
oder 0.9.8j oder höher) und Call OpenSSL::SSL::SSLSocket#hostname = 'hostname'
vor SSLSocket#connect
. Net::HTTPS
noch nicht unterstützt SNI und Open-uri nicht.
Httpclient Entwicklungs-Repository heraus überprüfen sollte SNI unterstützen.
Lassen Sie mich wissen, wenn Sie gem real soon jetzt ...
freigegeben brauchenAndere Tipps
Ruby-2.0 wird den TLS-SNI (Server Name Indication) Problem beheben:
von net / http ..
# ...
# s.session = @ssl_session if @ssl_session
# # Server Name Indication (SNI) RFC 3546
# s.hostname = @address if s.respond_to? :hostname=
# Timeout.timeout(@open_timeout, Net::OpenTimeout) { s.connect }
# if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
# s.post_connection_check(@address)
# end
# ...
Um diese Arbeit in 1.9.2 (oder höher) zu machen gelten ähnliche Patch net / http
# ...
# BEGIN: SNI PATCH http://bugs.ruby-lang.org/issues/4351
# s.hostname = @address if s.respond_to? :hostname=
# END: SNI PATCH http://bugs.ruby-lang.org/issues/4351
# timeout(@open_timeout) { s.connect }
# if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
# s.post_connection_check(@address)
# end
# ...
Siehe auch: http://bugs.ruby-lang.org/issues/4351 http://en.wikipedia.org/wiki/Server_Name_Indication
Ich habe diese Kampagne in Ausgabe Jagd eine Rückeinbindung in Rubin zu finanzieren 1.8.7 von SNI hoffentlich Menschen mit einem Cent oder dem Update beitragen können und alle unsere Probleme bekommen gelöst: D