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

Загрузка iOS 9 из Amazon S3 Ошибка SSL: поддержка TLS 1.2

Я получаю

Произошла ошибка SSL, и безопасное подключение к серверу не может.

на iOS 9, если я пытаюсь загрузить файл с amazon s3: https://s3.amazonaws.com/xyz/qer/IMG_0001.JPG

Из того, что я понимаю, Amazon s3 поддерживает TLS 1.2 см. https://forums.aws.amazon.com/thread.jspa?threadID=192512

S3 и Kinesis поддерживают TLS 1.2 в это время. введите описание изображения здесь

"S3 и Kinesis поддерживают TLS 1.2 в это время." 23 августа 2015 г. 21:19

Не уверен, почему я получу эту ошибку SSL. Учетная запись должна быть настроена на использование TLS 1.2? Я бы предположил, что по умолчанию это должно быть 'on'.

Я не хочу помещать этот домен в информационный план.

EDIT: Я закончил тем, что использовал

<key>NSAppTransportSecurity</key> 
<dict> 
  <key>NSExceptionDomains</key> 
  <dict> 
    <key>s3.amazonaws.com</key> 
    <dict> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
        <false/> 
      <key>NSIncludesSubdomains</key> 
        <true/> 
    </dict> 
  </dict> 
</dict>
4b9b3361

Ответ 1

Изменить 2016-01-03: Обновленный сертификат для s3.amazonaws.com использует алгоритм SHA256 и соответствует требованиям ATS.

Оригинальный ответ: s3.amazonaws.com использует сертификат SHA1, который не соответствует требованиям ОВД, что приводит к тяжелому сбою. В Технология безопасности приложений для транспорта, ATS в iOS9 имеет следующие требования:

  • Сервер должен поддерживать, по крайней мере, версию протокола уровня транспорта (TLS) версии 1.2.

  • Шиферы соединений ограничены теми, которые обеспечивают прямую секретность, а именно

    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384   TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256   TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384   TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA   TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256   TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA   TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

  • Сертификаты должны быть подписаны с использованием алгоритма хеширования SHA256 или лучше, либо с ключом RSA 2048 бит, либо с ключом с эллиптической кривой (ECC) размером 256 бит или более.

Недействительные сертификаты приводят к жесткому сбою и отсутствию соединения.

Тест SSL-сервера SSL Labs (https://www.ssllabs.com/ssltest/analyze.html?d=s3.amazonaws.com) включает в себя рукопожатие для ATS в iOS 9, которое указывает на сбой для s3.amazonaws.com.

Dev SSL Labs

Ответ 2

Вам нужно две вещи, чтобы приложение iOS 9 успешно достигало конечной точки SSL (только пример S3):

  • Переназначение (https://www.wikiwand.com/en/Forward_secrecy) включено на сервере.

    Эта функция в настоящее время не поддерживается AWS S3. Обходной путь для этого состоит в том, что вы можете настроить службу AWS CloudFront (которая поддерживает FS) перед вашим ведром S3. Настройка довольно проста. Если вы используете CORS, имейте в виду, что соответствующие заголовки должны проходить через прокси-сервер CloudFront.

  • Защищенный SSL-сертификат SHA-256 на сервере.

    После того, как ваши файлы будут доступны через Cloudfront, при попадании URL (https://somethinghashed1234wasdfawer421.cloudfront.net) вы заметите, что в SSL-сертификате там используется SHA-1, Как плохо... Решением для этого является защита этого с помощью вашего частного сертификата SHA-256 SSL. Для этого вам нужно указать CNAME для конечной точки Cloudfront в вашем домене. Это позволит вам защитить ведро с помощью собственного SSL-сертификата. Просто настройте свой DNS, чтобы он указывал облако cloudfront-bucket.mydomain.com на этот уродливый somethinghashed1234wasdfawer421.cloudfront.net. Загрузите сертификат SSL на amazon и установите защиту SSL в настройках распространения Cloudfront. Вуаля!

Все упомянутые вещи легко можно щелкнуть на консоли AWS (помимо загрузки SSL-сертификата, который нужно выполнить с помощью AWS CLI).

Ответ 3

Поскольку S3 в настоящее время не полностью совместим, согласно этот пост в блоге AWS, их официальная рекомендация состоит в том, чтобы исключить S3 из App Transport Security добавив этот набор ключей к вашему Info.plist:

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSExceptionDomains</key>
      <dict>
            <key>amazonaws.com</key>
            <dict>
                  <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                  <string>TLSv1.0</string>
                  <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                  <false/>
                  <key>NSIncludesSubdomains</key>
                  <true/>
            </dict>
            <key>amazonaws.com.cn</key>
            <dict>
                  <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                  <string>TLSv1.0</string>
                  <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                  <false/>
                  <key>NSIncludesSubdomains</key>
                  <true/>
            </dict>
      </dict>
</dict>

ОБНОВЛЕНИЕ 10/27/15: Как отмечает Пол в комментариях, хотя это официальный ответ от AWS, Apple Engineer в форумы поддержки говорит, что это на самом деле ошибка:

Оказывается, тот факт, что NSExceptionRequiresForwardSecrecy расслабляет требование SHA-2/256, является ошибкой; предполагаемое поведение NSExceptionRequiresForwardSecrecy - это поведение, задокументированное в Технике безопасности приложений на транспорте, а именно, что оно должно просто включать конкретные комплекты cypher.

Наш план состоит в том, чтобы исправить эту ошибку в какой-то момент в будущем. Мы ожидаем исправить это в некотором совместимом режиме, поэтому люди, которые ошибочно использовали NSExceptionRequiresForwardSecrecy для отключения требования SHA-2/256, не будут ломаться. Однако прогнозирование будущего всегда является проблемой. Это подводит нас к тому, что вы должны делать прямо сейчас. [Предыдущая версия этого сообщения давала менее конкретные советы. Ниже приведено обновление, которое подтягивает вещи.] Обсудив это с ATS Engineering, наши рекомендации:

Если вы используете конкретную услугу хостинга, вам следует проконсультироваться с вашим хостингом, чтобы получить последние рекомендации.

В таких ситуациях, когда сервер полностью совместим с ATS, за исключением требований к подписке на сертификат SHA-2/256, мы рекомендуем вам точно документировать это состояние дел, используя NSExceptionAllowsInsecureHTTPLoads.

Вам следует попытаться сделать ваш сервер полностью совместимым с ATS как можно скорее.

Когда это произойдет, вы должны обновить свое приложение с более безопасными настройками ATS.

Я должен подчеркнуть, что NSExceptionAllowsInsecureHTTPLoads на самом деле небезопасен. Это так же безопасно, как ваше приложение, когда оно работает на iOS 8. Скорее это означает, что ваше приложение не получает дополнительной безопасности, предоставляемой ATS. Поделиться и наслаждаться

Акцент мой. Обратите внимание, что текущий план состоит в том, чтобы исправить ошибку таким образом, чтобы не нарушал поведение пользователей, которые использовали NSExceptionRequiresForwardSecrecy для решения этой проблемы, поэтому приведенное выше все еще является жизнеспособным ответом.

Ответ 4

Просто опубликуйте, чтобы указать, что проблема с сертификатами amazon заключается в использовании SHA-1, а для безопасности транспортного средства приложения требуется SHA-2/256.

Тот факт, что NSExceptionRequiresForwardSecrecy работает, является ошибкой, зарегистрированной здесь, на веб-сайтах apple dev. Согласно документации и инженеру Apple в связанной теме, лучшим решением будет

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>s3.amazonaws.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict> 
    </dict> 
</dict>

Я использую термин "лучше" очень свободно и только означаю решение, которое не использует ошибку, которую в конечном итоге исправит Apple. Теперь это исправление для выпуска сертификата:)

Ответ 5

Пока Amazon не выйдет из своего * ss на этом, поскольку @Zsolt предложил вставить следующие ключи и значение в ваш файл plist.

НО не забудьте установить NSExceptionDomain на amazonaws.com вместо s3.amazonaws.com,, в зависимости от того, как будут обслуживаться ваши активы и из какого региона Amazon может обслуживать их, например, s3-us-west-1.amazonaws.com, поэтому явная настройка субдомена не позволит должным образом обслуживать активы из любого идентификатора региона AWS.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>amazonaws.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>