Безопасность транспорта приложений в Xamarin.iOS

Безопасность транспорта приложений (ATS) обеспечивает безопасные подключения между интернет-ресурсами (например, сервером серверного сервера приложения) и приложением.

В этой статье приводятся изменения безопасности, применяемые в приложении iOS 9, а также о том, что это означает для проектов Xamarin.iOS, они будут охватывать параметры конфигурации ATS, а также о том , как отказаться от ATS при необходимости. Так как ATS включен по умолчанию, все небезопасные подключения к Интернету будут вызывать исключение в приложениях iOS 9 (если вы не разрешили его явно).

Сведения о безопасности транспорта приложений

Как указано выше, ATS гарантирует, что все интернет-коммуникации в iOS 9 и OS X El Capitan соответствуют рекомендациям по безопасному подключению, тем самым предотвращая случайное раскрытие конфиденциальной информации непосредственно через приложение или библиотеку, которую она потребляет.

Для существующих приложений по возможности реализуйте HTTPS протокол. Для новых приложений Xamarin.iOS следует использовать HTTPS исключительно при взаимодействии с интернет-ресурсами. Кроме того, обмен данными API высокого уровня должен быть зашифрован с помощью TLS версии 1.2 с секретностью пересылки.

Любое подключение с NSUrl Подключение ion, CFUrl или NSUrlSession по умолчанию будет использовать ATS в приложениях, созданных для iOS 9 и OS X 10.11 (El Capitan).

Поведение ATS по умолчанию

Так как ATS включен по умолчанию в приложениях, созданных для iOS 9 и OS X 10.11 (El Capitan), все подключения с помощью NSUrl Подключение ion, CFUrl или NSUrlSession будут соответствовать требованиям безопасности ATS. Если ваши подключения не соответствуют этим требованиям, они завершаются сбоем с исключением.

Требования к Подключение ATS

ATS будет применять следующие требования для всех подключений к Интернету:

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

Опять же, так как ATS включен по умолчанию в iOS 9, любая попытка сделать подключение, которое не соответствует этим требованиям, приведет к возникновению исключения.

Совместимые шифры ATS

Следующий тип шифра секретности пересылки принимается защищенными интернет-коммуникациями ATS:

  • 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

Дополнительные сведения о работе с классами связи через Интернет iOS см. в справочнике по классам NSURL в Apple Подключение ion или NSURLSession Class Reference.

Поддержка ATS в Xamarin.iOS

Так как ATS включен по умолчанию в iOS 9 и OS X El Capitan, если ваше приложение Xamarin.iOS или любая библиотека или служба использует подключение к Интернету, вам потребуется выполнить некоторые действия или ваши подключения будут вызывать исключение.

Для существующего приложения Apple предлагает вам как можно скорее поддерживать HTTPS протокол. Если вы либо не можете, так как вы подключаетесь к сторонней веб-службе, которая не поддерживает HTTPS или если поддержка HTTPS будет нецелесообразной, вы можете отказаться от ATS. Дополнительные сведения см. в разделе "Отказ от использования ATS " ниже.

Для нового приложения Xamarin.iOS следует использовать HTTPS исключительно при взаимодействии с интернет-ресурсами. Опять же, могут возникнуть ситуации (например, использование сторонней веб-службы), где это невозможно, и вам потребуется отказаться от ATS.

Кроме того, ATS применяет высокоуровневую связь API для шифрования с помощью TLS версии 1.2 с секретностью пересылки. Дополнительные сведения см. в разделах о требованиях Подключение atS и совместимых шифрах ATS.

Хотя вы не знакомы с TLS (транспортная безопасность) он является преемником SSL (Secure Socket Layer) и предоставляет коллекцию криптографических протоколов для обеспечения безопасности сетевых подключений.

Уровень TLS управляется веб-службой, которую вы используете, и поэтому находится вне элемента управления приложения. И тот HttpClient , и он ModernHttpClient должны автоматически использовать самый высокий уровень шифрования TLS, поддерживаемый сервером.

В зависимости от сервера, с которым вы разговариваете (особенно если это 3-й сторонней службой), может потребоваться отключить секретность пересылки или выбрать более низкий уровень TLS. Дополнительные сведения см. в разделе "Настройка параметров ATS" ниже.

Внимание

Безопасность транспорта приложений не применяется к приложениям Xamarin с помощью реализации Managed HTTPClient. Он применяется только к подключениям с использованием реализаций HTTPClient CFNetwork или NSURLSession HTTPClient.

Настройка реализации HTTPClient

Чтобы задать реализацию HTTPClient, используемую приложением iOS, дважды щелкните проект в Обозреватель решений, чтобы открыть параметры проекта. Перейдите к сборке iOS и выберите нужный тип клиента в раскрывающемся списке реализации HttpClient:

Setting the iOS Build Options

Управляемый обработчик

Управляемый обработчик — это полностью управляемый обработчик HttpClient, который был отправлен с предыдущими версиями Xamarin.iOS и является обработчиком по умолчанию.

Преимущества.

  • Это наиболее совместимая с Microsoft .NET и более старой версией Xamarin.

Недостатки.

  • Он не полностью интегрирован с iOS (например, он ограничен TLS 1.0).
  • Обычно это гораздо медленнее, чем собственные API.
  • Для этого требуется более управляемый код и создание более крупных приложений.

Обработчик CFNetwork

Обработчик на основе CFNetwork основан на собственной CFNetwork платформе.

Преимущества.

  • Использует собственный API для повышения производительности и меньших размеров исполняемых файлов.
  • Добавляет поддержку новых стандартов, таких как TLS 1.2.

Недостатки.

  • Требуется iOS 6 или более поздней версии.
  • Недоступно для watchOS.
  • Некоторые функции и параметры HttpClient недоступны.

Обработчик NSUrlSession

Обработчик на основе NSUrlSession основан на собственном NSUrlSession API.

Преимущества.

  • Использует собственный API для повышения производительности и меньших размеров исполняемых файлов.
  • Добавляет поддержку новых стандартов, таких как TLS 1.2.

Недостатки.

  • Требуется iOS 7 или более поздней версии.
  • Некоторые функции и параметры HttpClient недоступны.

Диагностика проблем ATS

При попытке подключиться к Интернету напрямую или из веб-представления в iOS 9 может возникнуть ошибка в форме:

Служба "Безопасность транспорта приложений" блокирует загрузку ресурсов HTTP (http://www.-the-blocked-domain.com) с открытым текстом, так как она небезопасна. Временные исключения можно настроить с помощью файла Info.plist приложения.

В iOS9 безопасность транспорта приложений (ATS) обеспечивает безопасные подключения между интернет-ресурсами (например, сервером серверного сервера приложения) и приложением. Кроме того, ATS требует обмена данными с использованием HTTPS протокола и высокоуровневого взаимодействия API для шифрования с помощью TLS версии 1.2 с секретностью пересылки.

Так как ATS включен по умолчанию в приложениях, созданных для iOS 9 и OS X 10.11 (El Capitan), все подключения с использованием NSURLConnectionCFURL или NSURLSession будут соответствовать требованиям безопасности ATS. Если ваши подключения не соответствуют этим требованиям, они завершаются сбоем с исключением.

Apple также предоставляет пример приложения TLSTool, которое можно скомпилировать (или при необходимости перекодировать в Xamarin и C#) и использовать для диагностики проблем ATS/TLS. Дополнительные сведения о том, как решить эту проблему, см . в разделе "Отказ от использования ATS " ниже.

Настройка параметров ATS

Вы можете настроить несколько функций ATS, задав значения для определенных ключей в файле Info.plist приложения. Следующие ключи доступны для управления ATS (отступ, чтобы показать, как они вложены):

NSAppTransportSecurity
    NSAllowsArbitraryLoads
    NSAllowsArbitraryLoadsInWebContent
    NSExceptionDomains
    <domain-name-for-exception-as-string>
        NSExceptionMinimumTLSVersion
        NSExceptionRequiresForwardSecrecy
        NSExceptionAllowsInsecureHTTPLoads
        NSRequiresCertificateTransparency
        NSIncludesSubdomains
        NSThirdPartyExceptionMinimumTLSVersion
        NSThirdPartyExceptionRequiresForwardSecrecy
        NSThirdPartyExceptionAllowsInsecureHTTPLoads

Каждый ключ имеет следующий тип и значение:

  • NSAppTransportSecurity (Dictionary) — содержит все ключи и значения параметров для ATS.
  • NSAllowsArbitraryLoads (Boolean) — если YES ATS будет отключен для любого домена , который не указан в NSExceptionDomainsсписке. Для перечисленных доменов будут использоваться указанные параметры безопасности.
  • NSAllowsArbitraryLoadsInWebContent (Boolean) — если YES веб-страницы будут правильно загружаться в то время как защита от безопасности транспорта Apple (ATS) по-прежнему включена для остальной части приложения.
  • NSExceptionDomains (Dictionary) — коллекция доменов, которые и параметры безопасности, которые ATS должны использовать для данного домена.
  • <domain-name-for-exception-as-string> (Dictionary) — коллекция исключений для заданного домена (например. www.xamarin.com
  • NSExceptionMinimumTLSVersion (String) — минимальная версия TLS как TLSv1.0или TLSv1.1TLSv1.2 (которая по умолчанию).
  • NSExceptionRequiresForwardSecrecy (Boolean) — если NO домену не нужно использовать шифр с безопасностью пересылки. Значение по умолчанию — YES.
  • NSExceptionAllowsInsecureHTTPLoads (Boolean) — если NO (по умолчанию) все сообщения с этим доменом должны находиться в протоколе HTTPS .
  • NSRequiresCertificateTransparency (Boolean) — если YES протокол SSL домена должен содержать допустимые данные прозрачности. Значение по умолчанию — NO.
  • NSIncludesSubdomains (Boolean) — если YES эти параметры переопределяют все поддомены этого домена. Значение по умолчанию — NO.
  • NSThirdPartyExceptionMinimumTLSVersion (String) — версия TLS, используемая, когда домен является сторонней службой за пределами элемента управления разработчика.
  • NSThirdPartyExceptionRequiresForwardSecrecy (Boolean) — если YES стороннему домену требуется секретность пересылки.
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads (Boolean) — если YES ATS разрешает небезопасную связь с сторонними доменами.

Отказ от ATS

Хотя Apple настоятельно предлагает использовать HTTPS протокол и безопасное взаимодействие с интернет-информацией, возможно, это не всегда возможно. Например, если вы взаимодействуете с сторонней веб-службой или используете рекламу, доставленную в Интернет в приложении.

Если приложение Xamarin.iOS должно запросить небезопасный домен, следующие изменения в файле Info.plist приложения отключают значения по умолчанию безопасности, применяемые ATS для заданного домена:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.the-domain-name.com</key>
        <dict>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

В Visual Studio для Mac дважды щелкните Info.plist файл в Обозреватель решений, перейдите в представление источника и добавьте приведенные выше ключи:

The Source view of the Info.plist file after adding specified keys.

Если приложению необходимо загрузить и отобразить веб-содержимое с незащищенных сайтов, добавьте в файл Info.plist приложения следующее, чтобы веб-страницы загружались правильно, пока защита Apple Transport Security (ATS) по-прежнему включена для остальной части приложения:

<key>NSAppTransportSecurity</key>
<dict>
    <key> NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

При необходимости можно внести следующие изменения в файл Info.plist приложения, чтобы полностью отключить ATS для всех доменов и обмена данными через Интернет:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

В Visual Studio для Mac дважды щелкните Info.plist файл в Обозреватель решений, перейдите в представление источника и добавьте приведенные выше ключи:

The Source view of the Info.plist file after specifying NSAllowsArbitraryLoadsInWebContent and NSAllowsArbitraryLoads.

Внимание

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

Опять же, отключение ATS следует использовать только в качестве последнего средства, если переключение на безопасные подключения либо недоступно, либо нецелесообразно.

Итоги

В этой статье представлена защита транспорта приложений (ATS) и описан способ обеспечения безопасного взаимодействия с Интернетом. Во-первых, мы рассмотрели изменения, необходимые для приложения Xamarin.iOS, работающего в iOS 9. Затем мы рассмотрели управление функциями и параметрами ATS. Наконец, мы рассмотрели отказ от ATS в приложении Xamarin.iOS.