AWS S3 Отключение поддержки SSLv3

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

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

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

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

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

6 ответов

Решение

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

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

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

Обновление 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

Обновление 6 мая 2015, 18-53 вечера IST

Хорошо, после обновления драгоценного камня 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

ОБНОВЛЕНИЕ 6 мая 2015, 16-29 IST

После обновления файла hosts следует журнал трассировки Wireshark.

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

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

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

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

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

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

Просто для информации - мое имя сегмента похоже на xyz.abc.com, так что нет - в названии.

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

На основании полученных отзывов мы продлили срок прекращения поддержки SSLv3 для защиты соединений с блоками S3 до 12:00 PDT 20 мая 2015 года.

Официальные часто задаваемые вопросы по 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 работает отлично.

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

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

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

параметры соединения: { 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, вы получите ошибку. Удачи!

Другие вопросы по тегам