Подтвердить что ты не робот

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 пользователям нашего браузера в нашем пользовательском интерфейсе.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Крайний срок был перемещен:

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

Ответ 3

Обновление 7 мая 2015 г., 11:26 IST

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

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 г., 6-53 вечера IST

Хорошо, после обновления Excon-gem мы можем видеть протокол 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 г., 4-29 вечера IST

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

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

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

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

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

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

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

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

Ответ 4

Официальный 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) on ruby 2.1.4, отлично работает.

Ответ 5

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

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

Ответ 6

Мне удалось заставить 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, вы получите сообщение об ошибке. Удачи!