Безопасность транспорта приложения в Xamarin.iOSApp Transport Security in Xamarin.iOS

Безопасность транспорта приложения (ATS) обеспечивает безопасное соединение между Интернет-ресурсов (например, server серверной части приложения) и приложения.App Transport Security (ATS) enforces secure connections between internet resources (such as the app's back-end server) and your app.

В этой статье будут представлены изменения параметров безопасности, безопасность транспорта приложения накладывает на приложение iOS 9 и это означает для проектов Xamarin.iOS, оно покроет параметры конфигурации ATS и Здесь рассматриваются как отказаться от ATS ATS при необходимости.This article will introduce the security changes that App Transport Security enforces on an iOS 9 app and what this means for your Xamarin.iOS projects, it will cover the ATS configuration options and it will cover how to opt-out of ATS ATS if required. Так как ATS включен по умолчанию, все небезопасные подключения internet приведет к появлению исключения в приложениях iOS 9 (если она явно разрешен).Because ATS is enabled by default, any non-secure internet connections will raise an exception in iOS 9 apps (unless you've explicitly allowed it).

Сведения о безопасности транспорта приложенияAbout App Transport Security

Как уже говорилось, ATS гарантирует все подключение к Интернету в iOS 9 и OS X El Capitan соответствия безопасное подключение рекомендации, тем самым предотвращая случайное раскрытие конфиденциальной информации, либо напрямую с помощью приложения или библиотеку, которая является Использование.As stated above, ATS ensures that all internet communications in iOS 9 and OS X El Capitan conform to secure connection best practices, thereby preventing accidental disclosure of sensitive information either directly through your app or a library that it is consuming.

Для существующих приложений, реализовать HTTPS протокола, когда это возможно.For existing apps, implement the HTTPS protocol whenever possible. Для новых приложений Xamarin.iOS, следует использовать HTTPS исключительно в том случае, при взаимодействии с Интернет-ресурсам.For new Xamarin.iOS apps, you should use HTTPS exclusively when communicating with internet resources. Кроме того общий API связи должны быть зашифрованы с помощью TLS версии 1.2 с безопасной пересылки.Additionally, high-level API communication must be encrypted using TLS version 1.2 with forward secrecy.

Любого соединения, установленного с помощью NSUrlConnection, CFUrl или NSUrlSession будет использоваться ATS по умолчанию в приложениях, созданных для iOS 9 и OS X 10.11 (El Capitan).Any connection made with NSUrlConnection, CFUrl or NSUrlSession will use ATS by default in apps built for iOS 9 and OS X 10.11 (El Capitan).

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

Поскольку ATS включена по умолчанию в приложениях, созданных для iOS 9 и OS X 10.11 (El Capitan), все подключения с помощью NSUrlConnection, CFUrl или NSUrlSession будет предметом Требования к безопасности ATS.Since ATS is enabled by default in apps built for iOS 9 and OS X 10.11 (El Capitan), all connections using NSUrlConnection, CFUrl or NSUrlSession will be subject to ATS security requirements. Если эти требования не соответствуют подключений, они вызовут сбой с исключением.If your connections do not meet these requirement, they will fail with an exception.

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

ATS будут применяться следующие требования для всех подключений к Интернету:ATS will enforce the following requirements for all internet connections:

  • Все алгоритмы шифрования соединения должны использовать пересылку (PFS).All connection ciphers must be using forward secrecy. См. список ниже принятые шифров.See the list of accepted ciphers below.
  • Версии 1.2 или более поздней должен использоваться протокол безопасности транспортного уровня (TLS).The Transport Layer Security (TLS) protocol must be version 1.2 or greater.
  • Для всех сертификатов, необходимо использовать по крайней мере SHA256 пальца с 2048 бит или больше ключ RSA, или 256 бит или больше ключ Elliptic Curve (ECC).At least a SHA256 fingerprint with either a 2048 bit or greater RSA key, or a 256 bit or greater Elliptic-Curve (ECC) key must be used for all certificates.

Опять же поскольку ATS включена по умолчанию в iOS 9, любая попытка установить соединение, не соответствует этим требованиям приведет к возникновению исключения.Again, since ATS is enabled by default in iOS 9, any attempt to make a connection that doesn't meet these requirements will result in an exception being thrown.

Совместимые шифры ATSATS Compatible Ciphers

Следующий тип шифра полная безопасность пересылки, принимаются ATS защищенный обмен данными в Интернете:The following forward secrecy cipher type are accepted by ATS secured internet communications:

  • 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 internet communication классов см. в разделе Apple ссылки на класс NSURLConnection, ссылку CFURL или ссылки на класс NSURLSession .For more information about working with iOS internet communication classes, please see Apple's NSURLConnection Class Reference, CFURL Reference or NSURLSession Class Reference.

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

Так как ATS включен по умолчанию в iOS 9 и OS X El Capitan, если приложение Xamarin.iOS, или любая библиотека или службы, им устанавливает подключение к Интернету, вам потребуется выполнить определенное действие или подключениями приведет к возникновению исключения.Because ATS is enabled by default in iOS 9 and OS X El Capitan, if your Xamarin.iOS app or any library or service it is using makes connection to the internet, you'll need to take some action or your connections will result in an exception being thrown.

Для имеющегося приложения, Apple предлагает, поддерживается ли HTTPS протокола как можно скорее.For an existing app, Apple suggests you support the HTTPS protocol as soon as possible. Если вы либо невозможно, так как при подключении к сторонним веб-службы, который не поддерживает HTTPS или если пользуетесь HTTPS будет крайне неэффективно, вы можете отказаться от ATS.If you either can't because you are connecting to a 3rd party web service that doesn't support HTTPS or if supporting HTTPS would be impractical, you can opt-out of ATS. См. в разделе Opting горизонтального ATS Дополнительные сведения в приведенном ниже разделе.See the Opting-Out of ATS section below for more details.

Для нового приложения Xamarin.iOS, следует использовать HTTPS исключительно в том случае, при взаимодействии с Интернет-ресурсам.For a new Xamarin.iOS app, you should use HTTPS exclusively when communicating with internet resources. Опять же, может возникнуть ситуация, (например, с помощью стороннюю службу web) где это невозможно, и вы должны отказаться от ATS.Again, there might be situations (like using a 3rd party web service) where this isn't possible and you'll need to opt-out of ATS.

Кроме того ATS обеспечивает высокоуровневый API обмена данными с зашифрованы с помощью TLS версии 1.2 с безопасной пересылки.Additionally, ATS enforces high-level API communication to be encrypted using TLS version 1.2 with forward secrecy. См. в разделе требования к ATS подключения и совместимых шифры ATS разделах выше, для получения дополнительных сведений.See the ATS Connection Requirements and ATS Compatible Ciphers sections above for more details.

Хотя может быть знакомы с TLS (Transport Layer Security) он является преемником SSL (Secure Socket Layer) и предоставляет коллекцию протоколов шифрования для обеспечения безопасности через Сетевые подключения.While you might not be familiar with TLS (Transport Layer Security) it is the successor to SSL (Secure Socket Layer) and provides a collection of cryptographic protocols to enforce security over network connections.

На уровне TLS управляется, используемым веб-служба, поэтому за пределами приложения управления.The TLS level is controlled by the web service that you are consuming and is therefore outside of the app's control. Как HttpClient и ModernHttpClient будет использовать самый высокий уровень шифрования TLS, поддерживаемые сервером.Both the HttpClient and the ModernHttpClient should automatically use the highest level of TLS encryption supported by the server.

В зависимости от сервера, что идет (особенно в случае стороннюю службу), может потребоваться отключить пересылку (PFS) или выберите более низком уровне TLS.Depending on the server that you are talking to (especially if it is a 3rd party service), you might need to disable forward secrecy or select a lower TLS level. См. в разделе Настройка варианты ATS Дополнительные сведения в приведенном ниже разделе.See the Configuring ATS Options section below for more details.

Важно!

Безопасность транспорта приложения не применяется для приложений Xamarin с помощью HTTPClient управляемых реализаций.App Transport Security does not apply to Xamarin apps using Managed HTTPClient implementations. Он применяется к подключениям, с помощью CFNetwork реализаций HTTPClient или NSURLSession HTTPClient реализаций только.It applies to connections using CFNetwork HTTPClient implementations or NSURLSession HTTPClient implementations only.

Параметр реализация HTTPClientSetting the HTTPClient Implementation

Чтобы задать реализация HTTPClient, используемым приложением iOS, дважды щелкните проекта в обозревателе решений открыть параметры проекта.To set the HTTPClient Implementation used by an iOS app, double-click the Project in the Solution Explorer to open the Project Options. Перейдите к сборка iOS и выберите тип нужного клиента в разделе реализация HttpClient раскрывающегося списка:Navigate to iOS Build and select the desired client type under the HttpClient implementation dropdown:

Управляемого обработчикаManaged Handler

Управляемый это полностью управляемая обработчик HttpClient, который был отправлен с более ранними версиями Xamarin.iOS и является обработчиком по умолчанию.The Managed handler is the fully managed HttpClient handler that has been shipped with previous versions of Xamarin.iOS and is the default handler.

Преимущества:Pros:

  • Это наиболее совместимый с Microsoft .NET и более старую версию Xamarin.It is the most compatible with Microsoft .NET and older version of Xamarin.

Недостатки:Cons:

  • Он не является полностью интегрирован с iOS (например, она ограничена TLS 1.0).It is not fully integrated with iOS (e.g it is limited to TLS 1.0).
  • Это обычно гораздо медленнее, чем собственных API.It is usually much slower than the native APIs.
  • Он требует более управляемого кода и создает крупных приложениях.It requires more managed code and creates larger apps.

CFNetwork обработчикаCFNetwork Handler

CFNetwork на основе обработчика зависит от собственного CFNetwork framework.The CFNetwork based handler is based on the native CFNetwork framework.

Преимущества:Pros:

  • Использует собственный API для повышения производительности и небольшого размера исполняемого файла.Uses native API for better performance and smaller executable sizes.
  • Добавлена поддержка новых стандартов, таких как TLS 1.2.Adds support for newer standards such as TLS 1.2.

Недостатки:Cons:

  • Необходима ОС iOS 6 или более поздней версии.Requires iOS 6 or later.
  • Недоступно для watchOS.Not available of watchOS.
  • Некоторые функции HttpClient и параметры недоступны.Some HttpClient features and options are not available.

Обработчик NSUrlSessionNSUrlSession Handler

Обработчик NSUrlSession основе основан на собственный NSUrlSession API.The NSUrlSession based handler is based on the native NSUrlSession API.

Преимущества:Pros:

  • Использует собственный API для повышения производительности и небольшого размера исполняемого файла.Uses native API for better performance and smaller executable sizes.
  • Добавлена поддержка новых стандартов, таких как TLS 1.2.Adds support for newer standards such as TLS 1.2.

Недостатки:Cons:

  • Необходима ОС iOS 7 или более поздней.Requires iOS 7 or later.
  • Некоторые функции HttpClient и параметры недоступны.Some HttpClient features and options are not available.

Диагностика неполадок ATSDiagnosing ATS Issues

При попытке подключения к Интернету напрямую или с веб-представление в iOS 9, в форме может появиться ошибка:When attempting to connect to the internet, either directly or from a web view in iOS 9, you might get an error in the form:

Безопасность транспорта приложения заблокировал в виде открытого текста HTTP (http://www.-the-blocked-domain.com) загрузки ресурсов, так как он не защищен.App Transport Security has blocked a cleartext HTTP (http://www.-the-blocked-domain.com) resource load since it is insecure. Временные исключения можно задать через файл Info.plist приложения.Temporary exceptions can be configured via your app's Info.plist file.

В iOS9 приложение Transport Security (ATS) обеспечивает безопасное соединение между Интернет-ресурсов (например, server серверной части приложения) и приложения.In iOS9, App Transport Security (ATS) enforces secure connections between internet resources (such as the app's back-end server) and your app. Кроме того, ATS требуется взаимодействие с использованием HTTPS протокол и высокого уровня API связи с помощью TLS версии 1.2 с безопасной пересылки.Additionally, ATS requires communication using the HTTPS protocol and high-level API communication to be encrypted using TLS version 1.2 with forward secrecy.

Поскольку ATS включена по умолчанию в приложениях, созданных для iOS 9 и OS X 10.11 (El Capitan), все подключения с помощью NSURLConnection, CFURL или NSURLSession будут применяться требования к безопасности ATS.Since ATS is enabled by default in apps built for iOS 9 and OS X 10.11 (El Capitan), all connections using NSURLConnection, CFURL or NSURLSession will be subject to ATS security requirements. Если эти требования не соответствуют подключений, они вызовут сбой с исключением.If your connections do not meet these requirement, they will fail with an exception.

Компания Apple предоставляет также TLSTool пример приложения , можно скомпилировать (или при необходимости перекодированные с Xamarin и C#) и использовать для диагностирования неполадок ATS/TLS.Apple also provides the TLSTool Sample App that can be compiled (or optionally transcoded to Xamarin and C#) and used to diagnose ATS/TLS issues. См. в разделе Opting горизонтального ATS сведения о том, как решить эту проблему в приведенном ниже разделе.Please see the Opting-Out of ATS section below for information on how to solve this issue.

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

Некоторые функции ATS можно настроить, задав значения для определенных ключей в вашем приложении Info.plist файла.You can configure several of the features of ATS by setting values for specific keys in your app's Info.plist file. Доступны следующие разделы для управления ATS (с отступом, чтобы показать, как они являются вложенными):The following keys are available for controlling ATS (indented to show how they are nested):

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

Каждый ключ имеет следующий тип и значение:Each key has the following type and meaning:

  • NSAppTransportSecurity (Dictionary) — содержит все ключи параметров и значений в параметре ATS.NSAppTransportSecurity (Dictionary) - Contains all of the setting keys and values for ATS.
  • NSAllowsArbitraryLoads (Boolean) — Если YES ATS будет отключена для любого домена не в NSExceptionDomains.NSAllowsArbitraryLoads (Boolean) - If YES ATS will be disabled for any domain not listed in NSExceptionDomains. Для указанных доменов будет использоваться указанные параметры безопасности.For listed domains, the security settings specified will be used.
  • NSAllowsArbitraryLoadsInWebContent (Boolean) — Если YES позволит веб-страницы правильно загрузить, хотя по-прежнему включена защита Apple Transport Security (ATS) для остальной части приложения.NSAllowsArbitraryLoadsInWebContent (Boolean) - If YES will allow web pages to load correctly while Apple Transport Security (ATS) protection is still enabled for the rest of the app.
  • NSExceptionDomains (Dictionary) — это совокупность доменов и параметры безопасности, которые следует использовать ATS к указанному домену.NSExceptionDomains (Dictionary) - A collection of domains that and the security settings that ATS should use for a given domain.
  • < Domain-name-for-exception-as-string > (Dictionary)-коллекцию исключений для данного домена (например) (Dictionary) - A collection of exceptions for a given domain (eg. www.xamarin.com).www.xamarin.com).
  • NSExceptionMinimumTLSVersion (String) — минимальная версия TLS как TLSv1.0, TLSv1.1 или TLSv1.2 (по умолчанию).NSExceptionMinimumTLSVersion (String) - The minimal TLS version as either TLSv1.0, TLSv1.1 or TLSv1.2 (which is the default).
  • NSExceptionRequiresForwardSecrecy (Boolean) — Если NO не использовать шифр прямой безопасности домена.NSExceptionRequiresForwardSecrecy (Boolean) - If NO the domain does not have to use a cipher with forward security. Значение по умолчанию — YES.The default value is YES.
  • NSExceptionAllowsInsecureHTTPLoads (Boolean) — Если NO (по умолчанию), все связи с этим доменом должны находиться в HTTPS протокола.NSExceptionAllowsInsecureHTTPLoads (Boolean) - If NO (the default) all communications with this domain must be in the HTTPS protocol.
  • NSRequiresCertificateTransparency (Boolean) — Если YES домена Secure Sockets Layer (SSL) должны содержать допустимые прозрачности данные.NSRequiresCertificateTransparency (Boolean) - If YES the domain’s Secure Sockets Layer (SSL) must include valid transparency data. Значение по умолчанию — NO.The default value is NO.
  • NSIncludesSubdomains (Boolean) — Если YES эти параметры переопределяют все поддомены этого домена.NSIncludesSubdomains (Boolean) - If YES these settings override all subdomains of this domain. Значение по умолчанию — NO.The default value is NO.
  • NSThirdPartyExceptionMinimumTLSVersion (String) — используется, когда домен стороннюю службу вне контроля разработчика версии TLS.NSThirdPartyExceptionMinimumTLSVersion (String) - The TLS version used when the domain is a 3rd party service outside of the developer's control.
  • NSThirdPartyExceptionRequiresForwardSecrecy (Boolean) — Если YES для 3-й домена стороны требуется полная безопасность пересылки.NSThirdPartyExceptionRequiresForwardSecrecy (Boolean) - If YES a 3rd party domain requires forward secrecy.
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads (Boolean) — Если YES ATS позволит небезопасный обмен данными с доменами сторонних производителей.NSThirdPartyExceptionAllowsInsecureHTTPLoads (Boolean) - If YES the ATS will allow non-secure communication with 3rd party domains.

Отказ от извлечения ATSOpting-Out of ATS

Хотя Apple настоятельно рекомендует HTTPS протокола и безопасное подключение к Интернету на основе сведений, возможны ситуации, это не всегда возможно.While Apple highly suggests using the HTTPS protocol and secure communication to internet based information, there might be times that this isn't always possible. Например, при взаимодействии с стороннюю службу web или через Интернет, доставленных рекламы в вашем приложении.For example, if you are communicating with a 3rd party web service or using internet delivered ads in your app.

Если приложение Xamarin.iOS должно сделать запрос к небезопасным доменом, следующие изменения в приложение Info.plist файла приведет к отключению безопасности по умолчанию, применяемые ATS к указанному домену:If your Xamarin.iOS app must make a request to an insecure domain, the following changes to your app's Info.plist file will disable the security defaults that ATS enforces for a given domain:

<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 файл в обозревателе решений, переключитесь в источника просмотра и добавления выше ключи:Inside Visual Studio for Mac, double-click the Info.plist file in the Solution Explorer, switch to the Source view and add the above keys:

Если вашему приложению необходим для загрузки и отображения веб-содержимого с сайтов, небезопасный, добавьте следующий в приложение Info.plist файла, чтобы разрешить веб-страницы правильно загрузить, хотя по-прежнему включена защита Apple Transport Security (ATS) для rest приложения:If your app needs to load and display web content from non-secure sites, add the following to your app's Info.plist file to allow web pages to load correctly while Apple Transport Security (ATS) protection is still enabled for the rest of the app:

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

При необходимости можно внести следующие изменения в приложение Info.plist файл, чтобы полностью отключить ATS для всех доменов и обмен данными через Интернет:Optionally, you can make the following changes to your app's Info.plist file to completely disable ATS for all domains and internet communication:

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

В Visual Studio для Mac, дважды щелкните Info.plist файл в обозревателе решений, переключитесь в источника просмотра и добавления выше ключи:Inside Visual Studio for Mac, double-click the Info.plist file in the Solution Explorer, switch to the Source view and add the above keys:

Важно!

Если приложению требуется подключение на небезопасной веб-сайте, вы должны всегда введите домен, как исключения с помощью NSExceptionDomains вместо отключение ATS полностью с помощью NSAllowsArbitraryLoads.If your application requires a connection to an insecure website, you should always enter the domain as an exception using NSExceptionDomains instead of turning ATS off completely using NSAllowsArbitraryLoads. NSAllowsArbitraryLoads должен использоваться только в чрезвычайных ситуациях аварийного.NSAllowsArbitraryLoads should only be used in extreme emergency situations.

Опять же, отключить ATS следует только использоваться в качестве последнего средства, при переключении на безопасных подключений нецелесообразно или недоступны.Again, disabling ATS should only be used as a last resort, if switching to secure connections is either unavailable or impractical.

СводкаSummary

В этой статье появился приложения Transport Security (ATS) и описаны способом, он обеспечивает защищенный обмен данными с Интернетом.This article has introduced App Transport Security (ATS) and described the way it enforces secure communications with the internet. Во-первых мы рассматривали изменения, необходимые для приложения Xamarin.iOS, работающих под управлением iOS 9 ATS.First, we covered the changes ATS requires for a Xamarin.iOS app running on iOS 9. Затем мы рассматривали управление ATS функции и параметры.Then we covered controlling ATS features and options. Наконец мы рассматривали, отказ от ATS в приложении Xamarin.iOS.Finally, we covered opting out of ATS in your Xamarin.iOS app.