Селектор реализации 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:
Альтернативные параметры конфигурации
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) или более поздней версии.
- Вам нужна поддержка
HttpClient
TLS 1.2+ . - Вам не нужна поддержка
WebClient
TLS 1.2 и более поздних версий.
HttpClientHandler
— это хороший выбор, если вам нужна поддержка TLS 1.2+, но она должна поддерживать версии Android ранее, чем Android 4.1. Это также хороший выбор, если вам нужна поддержка WebClient
TLS 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:
- Выберите реализацию HttpClient и библиотеку TLS по умолчанию в разделе "Параметры проекта".
- Программно с помощью
Xamarin.Android.Net.AndroidClientHandler
. - Объявите переменные среды (необязательно).
Из трех вариантов рекомендуется использовать параметры проекта 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 будет использоваться либо ,btls
legacy
либоdefault
(то же самое, что и при пропуске этой переменной):XA_TLS_PROVIDER=btls
Эта переменная среды задается путем добавления файла среды в проект. Файл среды — это файл, отформатированный в формате Unix, с действием сборки AndroidEnvironment:
Дополнительные сведения о переменных среды и Xamarin.Android см. в руководстве по среде Xamarin.Android.