Ich versuche Rubys Net::HTTP
Implementierung mit SNI zu arbeiten.Server Name Indication Unterstützung in Net :: HTTP?
Sowohl mail.google.com als auch gmail.com haben dieselbe IP-Adresse. Wenn Sie also eine Verbindung über SSL herstellen, muss der Google-Server wissen, welches Zertifikat verwendet werden soll. Standardmäßig wird das mail.google.com-Zertifikat zurückgegeben. Dies ist ein Problem, wenn Sie WebFinger implementieren möchten.
WebFinger erfordert, dass Sie https://gmail.com/.well-known/host-meta
abrufen, um die LRDD-Informationen zu erhalten. Aus Sicherheitsgründen ist es jedoch wichtig, die SSL-Zertifikatsinformationen zu überprüfen.
Da Google in diesem Fall das standardmäßige mail.google.com-Zertifikat bereitstellt, schlägt SSL post_connection_check
fehl. Die richtige Lösung hier wäre, Server Name Indication für Net::HTTP
zu aktivieren, aber es ist mir nicht klar, wie man das mit den Ruby-Bindungen für OpenSSL arbeiten. Hat noch jemand eine Idee?
Sie sollten das Problem zu sehen, indem Sie der Lage sein:
require 'open-uri'
open('https://gmail.com/.well-known/host-meta') { |f| f.read }
ich angelegt habe auch einen Kern, der das Problem mit einer früheren Version von curl und OpenSSL zeigt:
https://gist.github.com/7936ef38787092a22897
Ich bin ganz überzeugt, aber nach dem ganzen Tag daran arbeiten und einige von gestern , dass dies eine Übung in Vergeblichkeit ist. Ich bin mir ziemlich sicher, dass, selbst wenn ich in der Lage wäre, SNI zum Laufen zu bringen, ich dafür Affen-Patches verwenden müsste, um ein schwieriges Einsatzszenario zu schaffen. –
Gibt es noch weitere Ruby-kompatible Optionen, um mit dieser Art von Problem umzugehen? Zum Beispiel, unterstützt Net :: HTTPS 'subjectAltName'? –
Eine andere vorgeschlagene Option wäre, meine eigene Implementierung von 'post_connection_check' zu schreiben, die Hostnamen gegen eine Whitelist mit Common Name Mappings überprüft. Wenn wir das getan haben, gibt es dann irgendwelche Sicherheitsimplikationen? –