Селектор реализации HTTPClient Stack и SSL/TLS для Android

Селекторы реализации HTTPClient Stack и SSL/TLS определяют реализацию HttpClient и SSL/TLS, которая будет использоваться приложениями Xamarin.Android.

Проекты должны ссылаться на сборку System.Net.Http .

Предупреждение

Апрель 2018 г. — из-за повышенных требований к безопасности, включая соответствие PCI, крупные поставщики облачных и веб-серверов, как ожидается, перестают поддерживать версии TLS старше 1.2. Проекты Xamarin, созданные в предыдущих версиях Visual Studio по умолчанию, используют более старые версии TLS.

Чтобы приложения продолжали работать с этими серверами и службами, необходимо обновить проекты Xamarin с Android HttpClient помощью приведенных ниже параметров, а затем повторно создать и Native TLS 1.2 повторно развернуть приложения для пользователей.

Конфигурация Xamarin.Android HttpClient находится в параметрах Android параметров проекта>, а затем нажмите кнопку "Дополнительные параметры".

Это рекомендуемые параметры для поддержки TLS 1.2:

Visual Studio Android Options

Альтернативные параметры конфигурации

AndroidClientHandler

AndroidClientHandler — это новый обработчик, который делегирует собственный код Java/OS вместо реализации всего в управляемом коде. Это рекомендуемый вариант.

Плюсы

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

Минусы

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

Managed (HttpClientHandler)

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

Плюсы

  • Это наиболее совместимые (функции) с MS .NET и более старыми версиями Xamarin.

Минусы

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

Выбор обработчика

Выбор между AndroidClientHandler и HttpClientHandler зависит от потребностей вашего приложения. AndroidClientHandler рекомендуется для наиболее актуальной поддержки безопасности, например.

  • Требуется поддержка TLS 1.2+ .
  • Приложение предназначено для Android 4.1 (API 16) или более поздней версии.
  • Вам нужна поддержка HttpClientTLS 1.2+ .
  • Вам не нужна поддержка WebClientTLS 1.2 и более поздних версий.

HttpClientHandler — это хороший выбор, если вам нужна поддержка TLS 1.2+, но она должна поддерживать версии Android ранее, чем Android 4.1. Это также хороший выбор, если вам нужна поддержка WebClientTLS 1.2 и более поздних версий.

Начиная с версии Xamarin.Android 8.3, HttpClientHandler по умолчанию используется протокол SSLbtls () в качестве базового поставщика TLS. Поставщик SSL-протокола SSL с скучно предлагает следующие преимущества:

  • Он поддерживает TLS 1.2+.
  • Она поддерживает все версии Android.
  • Она обеспечивает поддержку TLS 1.2 и более HttpClient WebClientпоздних версий.

Недостатком использования скучных SSL в качестве поставщика TLS является то, что он может увеличить размер результирующего APK (он добавляет около 1 МБ дополнительного размера APK на поддерживаемый ABI).

Начиная с Xamarin.Android 8.3, поставщик TLS по умолчанию является скучным SSL (btls). Если вы не хотите использовать SSL скучно, вы можете отменить изменения к исторической управляемой реализации SSL, задав для свойства значение legacy (дополнительные сведения о настройке $(AndroidTlsProvider) свойств сборки см. в разделе "Процесс сборки").

Программное использование AndroidClientHandler

HttpMessageHandler Это Xamarin.Android.Net.AndroidClientHandler реализация специально для Xamarin.Android. Экземпляры этого класса будут использовать собственную java.net.URLConnection реализацию для всех HTTP-подключений. Это теоретически обеспечит увеличение производительности HTTP и меньших размеров APK.

Этот фрагмент кода является примером того, как явно использовать один экземпляр HttpClient класса:

// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());

Примечание.

Базовое устройство Android должно поддерживать TLS 1.2 (т. е. Android 4.1 и более поздних версий). Обратите внимание, что официальная поддержка TLS 1.2 находится в Android 5.0+. Однако некоторые устройства поддерживают TLS 1.2 в Android 4.1+.

Параметр сборки реализации SSL/TLS

Этот параметр проекта определяет, какую базовую библиотеку TLS будет использоваться всеми веб-запросами и HttpClient WebRequest. По умолчанию выбран протокол TLS 1.2:

Например:

var client = new HttpClient();

Если для реализации HttpClient задано значение Managed , а для реализации TLS задано значение Native TLS 1.2+, client объект будет автоматически использовать управляемый HttpClientHandler и TLS 1.2 (предоставляемый библиотекой BoringSSL) для своих HTTP-запросов.

Однако если для реализации HttpClient задано AndroidHttpClientзначение, все HttpClient объекты будут использовать базовый класс java.net.URLConnection Java и не будут затронуты значением реализации TLS/SSL. WebRequest объекты будут использовать библиотеку BoringSSL.

Другие способы управления конфигурацией SSL/TLS

Существует три способа управления параметрами TLS приложения Xamarin.Android:

  1. Выберите реализацию HttpClient и библиотеку TLS по умолчанию в разделе "Параметры проекта".
  2. Программно с помощью Xamarin.Android.Net.AndroidClientHandler.
  3. Объявите переменные среды (необязательно).

Из трех вариантов рекомендуется использовать параметры проекта Xamarin.Android для объявления по умолчанию HttpMessageHandler и TLS для всего приложения. При необходимости программным образом создавать Xamarin.Android.Net.AndroidClientHandler экземпляры объектов. Эти параметры описаны выше.

Третий вариант — использование переменных среды — описано ниже.

Объявление переменных среды

Существует две переменные среды, связанные с использованием TLS в Xamarin.Android:

  • XA_HTTP_CLIENT_HANDLER_TYPE — Эта переменная среды объявляет значение по умолчанию HttpMessageHandler , используемое приложением. Например:

    XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
    
  • XA_TLS_PROVIDER— эта переменная среды объявляет, какая библиотека TLS будет использоваться либо , btlslegacyлибо default (то же самое, что и при пропуске этой переменной):

    XA_TLS_PROVIDER=btls
    

Эта переменная среды задается путем добавления файла среды в проект. Файл среды — это файл, отформатированный в формате Unix, с действием сборки AndroidEnvironment:

Дополнительные сведения о переменных среды и Xamarin.Android см. в руководстве по среде Xamarin.Android.