Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Селекторы реализации 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) или более поздней версии.
- Вам нужна поддержка
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 и более
HttpClientWebClientпоздних версий.
Недостатком использования скучных 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.AndroidClientHandlerXA_TLS_PROVIDER— эта переменная среды объявляет, какая библиотека TLS будет использоваться либо ,btlslegacyлибоdefault(то же самое, что и при пропуске этой переменной):XA_TLS_PROVIDER=btls
Эта переменная среды задается путем добавления файла среды в проект. Файл среды — это файл, отформатированный в формате Unix, с действием сборки AndroidEnvironment:
Дополнительные сведения о переменных среды и Xamarin.Android см. в руководстве по среде Xamarin.Android.





