2015-04-15 2 views
30

Мы получили письмо от AWS, в котором говорится: «S3 отключает поддержку SSLv3, доступ будет отключен через 15 дней». Затем они перечислили некоторые ведра, которые у нас есть (один в производстве), которые «в настоящее время принимают запрос от клиентов, которые указывают SSLv3». Полный адрес электронной почты здесь, и другие пользователи AWS, кажется, получили один тоже:AWS S3 Отключение поддержки SSLv3

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

Мой вопрос, как мы тестируем для этого сценария, и что нам нужно сделать, чтобы подготовиться к этому вырезом дата отъезда?

Мы используем Rails 4.1 и Fog (~> 1.28.0) и right_aws (~> 3.1.0) для доступа AWS, и мы находимся на Heroku. Наше приложение предоставляет подписанные HTTPS-ссылки на ресурсы S3 пользователям нашего браузера в нашем пользовательском интерфейсе.

Это просто проблема с клиентом (браузером) или что-то, что нам нужно, чтобы лучше понять и проверить/исправить?

+1

Мое понимание - это полностью проблема с браузером, и это существенно сокращает поддержку браузеров меньше, чем IE7. Мне бы хотелось провести некоторые тесты, прежде чем они сократят это до производственных данных, но надеюсь, что мы сможем найти более подробную информацию в ближайшее время. –

+0

Спасибо за ответ. Да, мы подозреваем, что это всего лишь обесцененные браузеры, что имеет смысл. Наша забота, как и ваша, заключается в том, что мы чего-то упускаем, и мы действительно хотим проверить этот сценарий до любой даты смерти. Пока поддержка AWS ничего не говорит, поэтому нам нужно попробовать премиум-поддержку, если в ближайшее время ничего не выйдет: https://forums.aws.amazon.com/thread.jspa?threadID=176062 – user1690146

ответ

9

туман использует excon для своего http (ов) транспорта. excon - это клиент-клиент с минимальным уровнем чистого ruby, который опирается на привязки ruby ​​openssl для работы. Хотя можно явно установить версию ssl для использования, excon не делает, что, насколько мне известно, должно означать, что он ведет переговоры с сервером, чтобы выбрать, что использовать (поэтому, если сервер запрашивает не SSLv3, он должен сотрудничать).

Я считаю, что это должно означать, что здесь не требуется никаких действий, но специфика всех, которые немного различаются по версиям Ruby и OpenSSL (не говоря уже о том, что немного сложно понять или понять специфику этих привязок), поэтому трудно сказать наверняка. excon поддерживает аргумент ssl_version, который может использоваться для принудительной реализации конкретной версии, если она в конечном итоге является проблемой (это просто не очень хороший общий выбор, потому что он запрещает согласование, а специфика варьируется между версиями ruby).

Надеюсь, что это поможет.

+0

Спасибо, это помогает и дает нам больше возможностей продолжать. Мы на рубине 2.2.1p85, поэтому я почти уверен, что excon проведет переговоры с SSLv3 как для тумана, так и для правых. Я оставлю это открытым дольше, чтобы добавить дополнительную информацию, но я думаю, что мы продолжим путь (a) с помощью wirehark и т. Д., Чтобы проверить наш сервер на вызовы S3, являются TLS и (b) right_aws (которые мы просто используем для заголовков S3) старше и менее поддерживается, чем туман, поэтому просто для уменьшения количества движущихся частей мы рассмотрим удаление этого и использование чего-то другого. Еще раз спасибо. – user1690146

+0

Мы находились в контакте с поддержкой AWS, и они настраивают ведро S3 для тестирования с отключенным доступом SSLv3. Таким образом, мы скоро сможем убедиться, что все в excon/fog работает нормально. Я вернусь и обновлю это, когда у нас будет такой ответ, поскольку это может помочь другим. – user1690146

+0

Отлично, спасибо за обновление. Определенно будет хорошо иметь это разъяснение. – geemus

4

Это проблема на стороне клиента полностью, если протокол, используемый клиентом (например, браузером) для выдачи запросов по https, является SSLv3, чем не будет выполнено рукопожатие ssl, и эти запросы не удастся. Таким образом, клиенту необходимо отключить SSLv3.

Действие AWS является следствием уязвимости POODLE, обнаруженной в прошлом году, и с тех пор все дистрибутивы AWS CloudFront, использующие доменное имя * .cloudfront.net, были обновлены с прекращенной поддержкой SSLv3. Теперь AWS перемещается на S3, чтобы сделать то же самое.

+0

Спасибо за ответ, что помогает. Как и клиенты браузера, наш сервер взаимодействует с S3 (через драгоценные камни fog и right_aws), тогда я думаю, что именно эти «клиенты» мы хотели понять и проверить. Это приводит к необходимости дополнительной информации о том, как установить это до даты отсечения. – user1690146

+0

Я знаю, что это своего рода ОТ, потому что речь идет о самоцвете Fog, но означает ли это, что если, скажем, мы используем FactoryGirl, это не имеет значения, если браузеры пользователей используют TLS? –

+0

Сегодня поддержка aws прислала мне список с ip-адресом, который задействован (только 7 на основе 3-дневного периода в апреле), и действительно это было тоталитарным вопросом на стороне браузера! Я думаю, что все мы, ребята, могли бы сэкономить много времени, если бы Aws были менее драматичными и точными в первом уведомлении по электронной почте, которое мы получили! – Ousmane

9

срок был перенесен:

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

мая Update 7 2015, 11:26 утра IST

В carrierwave инициализаторе, навели следующим образом,

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 

Это работало для меня, и посмотрите на журнал отслеживания проводов.

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 мая 2015, 6-53 PM IST

Ok, После обновления драгоценного камня EXCON, мы можем увидеть TLSv1.2 протокол между нашим сервером и серверами S3.

bundle update excon

Wireshark журнала трассировки заявления,

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 мая 2015, 4-29 PM IST

После обновления файла хостов, является следующее wirechark trace log.

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

Пожалуйста, смотрите выше захвата запроса Wireshark, когда я загрузить файл из моих местных рельсов развития на S3. Как видно, при первоначальном рукопожатии сервер Amazon использует SSLv3, и поэтому мой сервер rails отправляет все будущие запросы с помощью SSLv3.

Теперь вопрос в том, как изменить параметры ведра, чтобы он принимал/инициировал процесс только с использованием TLS? Я проверил настройки amazon, нет ничего подобного.

Я уже изменил свой nginx, чтобы использовать TLS, но я думаю, что это не нужно, потому что Rails будет разговаривать с S3 в фоновом режиме с использованием Excon, как упомянуто выше.

Итак, пожалуйста, предложите, какой может быть наилучший способ проверить это до 20 мая, чтобы убедиться, что он не сломается в этот день.

Любая помощь будет отличной.

Только для информации. Мое имя в виде ковша похоже на xyz.abc.com, поэтому нет - в названии.

+0

Благодарим вас за документирование вашего расследования. Я хотел бы проверить мои обновления с помощью wireshark/tshark, но у меня есть только доступ к командной строке. 'tshark -f 'tcp port 80 и http'' не показывает рукопожатие TSL. У вас есть понимание этого? – forgotpw1

+0

Я установил проводку на Ubuntu и запускаю его с помощью 'sudo wireshark', потому что он не позволяет трассировать запросы до запуска из корневого режима. И я не хотел тратить больше времени на его изучение, поэтому используйте режим 'sudo'. Пожалуйста, используйте wirehark в корневом режиме, попросите своего администратора сделать это за вас, по крайней мере, на несколько дней. – Parth

6

официальный FAQ 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 

Настройка выше в вашем /etc/hosts, заменив <bucket name> с вашим именем ведра.

ПРИМЕЧАНИЕ: при использовании с ведром без us-east-1 вы можете получить ответы на перенаправление и отказ. Это больше связано с их инфраструктурой adhoc для тестирования этого, чем что-либо еще. Поэтому игнорируйте это.

Создайте «стандартное ведро США» и протестируйте его вместо этого. Не забудьте настроить приложение для использования области s3 external-1

FWIW, мое приложение с использованием paperclip (4.2.0) на ruby 2.1.4 работает нормально.

+0

Да, я нашел эти конфигурации хостов, но когда я делаю это с существующим ведром, он бросает, 'Excon :: Errors :: SocketError (SSL_connect return = 1 errno = 0 state = SSLv3 read server hello A: sslv3 отказ от рукопожатия (OpenSSL :: SSL :: SSLError)) ' Я использую Carrierwave 0.6.2 и туман 1.6.2 – Parth

+0

Хорошо, когда я добавил« внешний-1 »в качестве области в конфигурации несущей, он работает. Но когда я отслеживаю запросы через wirehark, он сначала пытается искать DNS для 's3-external-1.amazonaws.com' и получает новый IP-адрес, начиная с' 54.231.xx.xx'. Из этого IP-адреса рукопожатие «сервер привет» показывает «SSLv3». Загрузка и удаление файлов работает нормально, но я сомневаюсь, что он все еще использует SSLv3. Что мы можем сделать, чтобы остановить его? – Parth

+0

Итак, согласно вашему комментарию. - Если я использую регион по умолчанию 'us-east-1', он не работает. - если я использую 'exernal-1', его работа, но он разрешает diff. IP, чем указанный. Пожалуйста, предложите. – Parth

2

Я был в состоянии заставить TLS, используя следующие настройки в моем тумане конфигурации:

connection_options: {ssl_version:: TLSv1_2}

Чтобы проверить, обновите хост-файл (инструкции от 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 

Мне удалось связаться. Кроме того, если вы измените настройку на: SSLv3, вы получите сообщение об ошибке. Удачи!

+1

Как бы вы это сделали, если бы использовали Carrierwave? Часть хеша fog_credentials? – user1690146

+0

Да, тот же вопрос, что и выше. Как определить в несущей волне, и она нужна? – Parth

+0

Хорошо, думаю, я понял. См. Мой обновленный ответ для деталей конфигурации инициализатора carrier_wave. – Parth