2015-04-15 11 views
30

Wir haben eine E-Mail von AWS erhalten, in der im Wesentlichen steht: "S3 deaktiviert den SSLv3-Support, der Zugriff wird in 15 Tagen unterbrochen". Dann listeten sie einige Buckets auf, die wir haben (eine in der Produktion), die derzeit Anfragen von Clients akzeptieren, die SSLv3 angeben. Die vollständige E-Mail ist hier, und andere AWS Benutzer scheinen ein zu erhalten haben:AWS S3 Deaktivieren der SSLv3-Unterstützung

https://gist.github.com/anonymous/4240c8af5208782c144c

Meine Frage ist, wie wir für dieses Szenario zu testen, und was brauchen wir für dieses cut- vorzubereiten zu tun Aus datum?

Wir verwenden Rails 4.1 und die Nebel (~> 1.28.0) und Right_aws (~> 3.1.0) Edelsteine ​​für AWS Zugang und wir sind auf Heroku. Unsere App bietet unseren Nutzern in unserer Benutzeroberfläche signierte HTTPS-Links zu S3-Ressourcen.

Ist dies nur ein Client (Browser) Problem oder etwas, das wir besser verstehen und testen/beheben müssen?

+1

Mein Verständnis ist, es ist vollständig ein Browser-Problem, und dies im Wesentlichen schneidet Unterstützung für Browser weniger als IE7. Ich würde gerne einige Tests durchführen, bevor sie dies auf Produktionsdaten reduzieren, in der Hoffnung, dass wir bald weitere Informationen finden können. –

+0

Danke für die Antwort. Ja, wir vermuten, dass es sich hierbei nur um entwertete Browser handelt, was sinnvoll ist. Uns geht es genauso wie Ihnen darum, dass wir etwas vermissen, und wir wollen dieses Szenario wirklich vor einem totalen Datum testen. Bis jetzt sagen AWS-Support nichts, also müssen wir Premium-Support versuchen, wenn nichts in Kürze herauskommt: https://forums.aws.amazon.com/thread.jspa?threadID=176062 – user1690146

Antwort

9

fog verwendet excon für seinen HTTP (s) -Transport. excon ist ein Low-Level-pure-ruby-HTTP-Client, der auf die Ruby OpenSSL-Bindungen angewiesen ist. Obwohl es möglich ist, explizit eine ssl-Version zu verwenden, tut excon das nicht, was meines Wissens nach bedeuten sollte, dass es mit dem Server verhandelt, um auszuwählen, was zu verwenden ist (wenn also der Server nicht nach SSLv3 fragt, sollte es dies tun) kooperieren).

Ich glaube, dass sollte bedeuten, dass hier keine Aktion erforderlich wäre, aber die Besonderheiten von all dem unterscheiden sich ein wenig zwischen Ruby und OpenSSL-Versionen (nicht zu erwähnen, dass es schwierig ist, die Besonderheiten dieser Bindungen zu verstehen)), so ist es schwer zu sagen. excon unterstützt ein ssl_version-Argument, das verwendet werden kann, um eine bestimmte Version zu erzwingen, wenn es ein Problem sein sollte (dies ist keine gute allgemeine Wahl, da die Verhandlung nicht erlaubt ist und die Besonderheiten zwischen Ruby-Versionen variieren).

Hoffe, dass hilft.

+0

Danke, das hilft uns und gibt uns mehr weiter. Wir sind auf Ruby 2.2.1p85, also bin ich mir fast sicher, dass excon ok von SSLv3 sowohl für Nebel als auch für Right_aws verhandeln wird. Ich werde dies noch etwas länger offen lassen, um weitere Informationen hinzuzufügen, aber ich denke, wir werden den Pfad von (a) mit wireshark usw. verfolgen, um zu überprüfen, ob unser Server S3-Aufrufe TLS und (b) Right_aws sind (die wir gerade verwenden für S3-Header) ist älter und weniger gepflegt als Nebel, nur um die Anzahl der beweglichen Teile zu reduzieren, schauen wir uns das an und entfernen etwas anderes. Danke noch einmal. – user1690146

+0

Wir haben Kontakt zur AWS-Unterstützung aufgenommen und richten einen S3-Bucket für Tests mit deaktiviertem SSLv3-Zugriff ein. Auf diese Weise werden wir bald sicher sein können, dass alles in Excon/Fog mit Sicherheit funktioniert. Ich werde zurückkommen und dies aktualisieren, wenn wir diese Antwort haben, da es anderen helfen könnte. – user1690146

+0

Großartig, danke für das Update. Auf jeden Fall wird es gut sein, diese Klarstellung zu haben. – geemus

4

Es ist ein clientseitiges Problem vollständig, wenn das Protokoll, das der Client (z. B. der Browser) verwendet, um Anforderungen über HTTPS ausgibt, SSLv3 ist, als der SSL-Handshake nicht erfolgreich ist und diese Anforderungen fehlschlagen. Es ist also der Client, der SSLv3 deaktivieren muss.

Die Aktion von AWS ist eine Folge der im letzten Jahr aufgedeckten POODLE-Schwachstelle und seither wurden auch alle AWS CloudFront-Distributionen, die den Domänennamen * .cloudfront.net verwenden, mit der eingestellten SSLv3-Unterstützung aktualisiert. Jetzt bewegt sich AWS weiter zu S3, um das Gleiche zu tun.

+0

Danke für die Antwort, das hilft. Sowie die Browser-Clients, kommuniziert unser Server mit S3 (über die Nebel und Right_aws Edelsteine), dann denke ich, dass es diese "Clients" sind, die wir verstehen und testen wollten. Dies führt dazu, dass Sie mehr Informationen darüber benötigen, wie Sie dies vor dem Stichtag einrichten können. – user1690146

+0

Ich weiß, dass das eine Art von OT ist, weil die Frage nach dem Fog-Juwel geht, aber bedeutet das, dass, wenn wir FactoryGirl verwenden, es keine Rolle spielt, solange die Browser der Benutzer TLS verwenden? –

+0

Heute hat mir die aws-Unterstützung eine Liste mit der IP-Adresse geschickt (nur 7 basierend auf 3 Tagen im April) und tatsächlich war es ein browser-seitiges Problem! Ich denke, dass wir alle viel Zeit sparen konnten, wenn Aws in der ersten E-Mail, die wir erhalten hatten, weniger dramatisch und präziser waren. – Ousmane

9

Termin wurde verschoben:

Based on the feedback received we are extending the deadline for discontinuing support of SSLv3 for securing connections to S3 buckets to 12:00 AM PDT May 20, 2015.

8

Mai Update 7 2015 11.26 IST

In carrierwave initializer, die Dinge, wie folgend,

CarrierWave.configure do |config| 
    config.fog_credentials = { 
     :provider    => 'AWS',  # required 
     :aws_access_key_id  => Settings.carrier_wave.amazon_s3.access_key,  # required 
     :aws_secret_access_key => Settings.carrier_wave.amazon_s3.secret_key,  # required 
     :region     => 'external-1' # optional, defaults to 'us-east-1' 
    } 
    config.fog_directory = Settings.carrier_wave.amazon_s3.bucket     # required 
    #config.fog_host  = 'http://aws.amazon.com/s3/'   # optional, defaults to nil 
    config.fog_public  = false         # optional, defaults to true 
    config.fog_authenticated_url_expiration = 600 
    config.fog_attributes = {ssl_version: :TLSv1_2} #{'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} 
end 

Das funktionierte für mich und werfen Sie einen Blick auf das Wireshark Trace Log.

1577 22.611358000 192.168.0.113 8.8.8.8 DNS 87 Standard query 0xffd8 A s3-external-1.amazonaws.com 
1578 22.611398000 192.168.0.113 8.8.8.8 DNS 87 Standard query 0xbf2f AAAA s3-external-1.amazonaws.com 
1580 22.731084000 8.8.8.8 192.168.0.113 DNS 103 Standard query response 0xffd8 A 54.231.1.234 
1586 22.849595000 54.231.10.34 192.168.0.113 TLSv1.2 107 Encrypted Alert 

1594 23.012866000 192.168.0.113 54.231.1.234 TLSv1.2 347 Client Hello 
1607 23.310950000 192.168.0.113 54.231.1.234 TLSv1.2 204 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 
1608 23.578966000 54.231.1.234 192.168.0.113 TLSv1.2 129 Change Cipher Spec, Encrypted Handshake Message 
1609 23.579480000 192.168.0.113 54.231.1.234 TLSv1.2 427 Application Data 
1610 23.868725000 54.231.1.234 192.168.0.113 TLSv1.2 299 Application Data 

-Update 6. Mai 2015, 6-53 Uhr IST

Ok, nach Anhörung des Excon Juwel aktualisieren, dann sind wir in der Lage, das TLSv1.2 Protokoll zwischen unserem Server und S3-Server zu sehen.

bundle update excon

Wireshark Trace-Protokoll Aussagen,

29 1.989230000 192.168.0.115 54.231.32.0 SSL 336 Client Hello 
34 2.215461000 54.231.32.0 192.168.0.115 TLSv1.2 1494 Server Hello 
40 2.219301000 54.231.32.0 192.168.0.115 TLSv1.2 471 Certificate 
42 2.222127000 192.168.0.115 54.231.32.0 TLSv1.2 204 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 

UPDATE 6. Mai 2015, 29.04 Uhr IST

Nach der Aktualisierung der Hosts-Datei ist nach dem Wireshark-Ablaufprotokoll.

14 2.012094000 192.168.0.115 54.231.32.0 SSLv3 192 Client Hello 
17 2.242423000 54.231.32.0 192.168.0.115 SSLv3 61 Alert (Level: Fatal, Description: Handshake Failure) 

Wireshark request capture

Bitte beachten Sie die oben wireshark Anfrage zu erfassen, wenn ich eine Datei von meiner lokalen Entwicklungsschiene auf S3 hochladen. Wie es zeigt, verwendet Amazon Server beim ersten Handshake SSLv3 und so sendet mein Rails Server alle zukünftigen Anfragen mit SSLv3.

Nun ist die Frage, wie kann ich die Bucket-Einstellungen ändern, so dass es den Prozess nur mit TLS akzeptieren/initiieren würde? Ich habe amazon Einstellungen eingecheckt, es gibt nichts dergleichen.

Ich habe bereits mein nginx geändert, um TLS zu verwenden, aber ich denke, dass das nicht benötigt wird, weil Rails mit S3 im Hintergrund mit Excon sprechen wird, wie im obigen Kommentar erwähnt.

Also, bitte schlagen Sie vor, was der beste Weg sein könnte, dies vor dem 20. Mai zu testen, um sicherzustellen, dass es an diesem Tag nicht bricht.

Jede Hilfe wäre großartig.

Nur zur Information - Mein Bucket Name ist wie xyz.abc.com, also nein - im Namen.

+0

danke für die Dokumentation Ihrer Untersuchung. Ich möchte meine Updates mit wireshark/tshark überprüfen, aber ich habe nur Zugriff auf die Befehlszeile. 'tshark -f 'tcp Port 80 und http'' zeigt nicht den TSL-Handshake. Hast du einen Einblick darin? – forgotpw1

+0

Ich installierte Dratheshare auf Ubuntu, und starte es mit 'sudo wireshark', weil es keine Anfragen verfolgen kann, bis es im Root-Modus läuft. Und ich wollte nicht mehr Zeit mit der Recherche verbringen, also benutze den 'sudo'-Modus. Bitte verwenden Sie Wireshark im Root-Modus, bitten Sie Ihren Administrator, es für einige Tage zu erledigen. – Parth

6

offiziellen FAQs AWS https://forums.aws.amazon.com/thread.jspa?threadID=179904&tstart=0

54.231.32.0 s3.amazonaws.com 
54.231.32.1 <bucket name>.s3.amazonaws.com 
54.231.32.3 <bucket name>.s3-external-1.amazonaws.com 

Konfigurieren des oben in Ihrem /etc/hosts, ersetzen <bucket name> mit Ihrem Eimer Namen.

HINWEIS: Wenn Sie mit einem nicht us-east-1 Bucket arbeiten, können Sie Redirect- und Fehlerreaktionen erhalten. Dies hat mehr mit ihrer Adhoc-Infrastruktur zu tun, als dies zu testen. Also ignorier das.

Erstellen Sie einen "Standard-US-Bucket" und testen Sie stattdessen mit diesem. Denken Sie daran, Ihre App zu konfigurieren, um s3 Region external-1

FWIW, meine App mit paperclip (4.2.0) auf ruby 2.1.4 funktioniert gut.

+0

Ja, ich habe diese Hosts-Konfigurationen gefunden, aber wenn ich das mit dem vorhandenen Bucket mache, wird 'Excon :: Errors :: SocketError (SSL_connect = 1 zurückgegeben errno = 0 state = SSLv3 Server lesen hallo A: sslv3 alert handshake failure (OpenSSL :: SSL :: SSLError)) ' Ich benutze Carrierwave 0.6.2, und Nebel 1.6.2 – Parth

+0

Ok, Wenn ich die' externe-1' als eine Region in Carrierwave-Konfiguration hinzugefügt, funktioniert es. Aber wenn ich die Anfragen über Wireshark aufspüre, versucht es zunächst DNS nach 's3-external-1.amazonaws.com' zu suchen und bekommt eine neue IP-Adresse, die mit' 54.231.xx.xx' beginnt. Von dieser IP zeigt der "Server Hallo" Handshake "SSLv3". Das Hochladen und Entfernen der Datei funktioniert einwandfrei, aber ich bezweifle, dass SSLv3 noch verwendet wird. Was können wir tun, um es zu stoppen? – Parth

+0

Also, nach Ihrem Kommentar. - Wenn ich die Standardregion 'us-east-1' verwende, funktioniert es nicht. - Wenn ich 'exernal-1' benutze, funktioniert es, aber es löst Diff. IP als die angegebene. Bitte vorschlagen. – Parth

2

konnte ich TLS zwingen, die folgende Einstellung in meinem Nebel config:

connection_options: {ssl_version: TLSv1_2}

Um zu testen, aktualisieren Sie Ihre Host-Datei (Anweisungen von AWS):

54.231.32.0 s3.amazonaws.com 
54.231.32.1 bucket.s3.amazonaws.com #replace bucket with your bucket name 
54.231.32.3 bucket.s3-external-1.amazonaws.com #replace bucket with your bucket name 

Ich konnte erfolgreich verbinden. Wenn Sie die Einstellung zu: SSLv3 ändern, erhalten Sie einen Fehler. Viel Glück!

+1

Wie würdest du das machen, wenn du Carrierwave benutzt? Teil des fog_credentials-Hashs? – user1690146

+0

Ja, Gleiche Frage wie oben. Wie in Carrierwave definieren, und wird es benötigt? – Parth

+0

Ok, ich glaube, ich habe es verstanden. Bitte beachten Sie meine aktualisierte Antwort für Carrier_wave Initialisierungskonfigurationsdetails. – Parth