Безопасность транспорта приложений в 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:
Управляемый обработчик
Управляемый обработчик — это полностью управляемый обработчик 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), все подключения с использованием NSURLConnection
CFURL
или 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.1
TLSv1.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
файл в Обозреватель решений, перейдите в представление источника и добавьте приведенные выше ключи:
Если приложению необходимо загрузить и отобразить веб-содержимое с незащищенных сайтов, добавьте в файл 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
файл в Обозреватель решений, перейдите в представление источника и добавьте приведенные выше ключи:
Внимание
Если приложению требуется подключение к небезопасным веб-сайту, всегда следует ввести домен в качестве исключения, используя NSExceptionDomains
вместо того, чтобы полностью отключить NSAllowsArbitraryLoads
ATS. NSAllowsArbitraryLoads
следует использовать только в чрезвычайных ситуациях.
Опять же, отключение ATS следует использовать только в качестве последнего средства, если переключение на безопасные подключения либо недоступно, либо нецелесообразно.
Итоги
В этой статье представлена защита транспорта приложений (ATS) и описан способ обеспечения безопасного взаимодействия с Интернетом. Во-первых, мы рассмотрели изменения, необходимые для приложения Xamarin.iOS, работающего в iOS 9. Затем мы рассмотрели управление функциями и параметрами ATS. Наконец, мы рассмотрели отказ от ATS в приложении Xamarin.iOS.