HttpClient Stack et sélecteur d’implémentation SSL/TLS pour Android
Les sélecteurs de pile HttpClient et d’implémentation SSL/TLS déterminent l’implémentation HttpClient et SSL/TLS qui sera utilisée par vos applications Xamarin.Android.
Les projets doivent référencer l’assembly System.Net.Http .
Avertissement
Avril 2018 – En raison d’exigences de sécurité accrues, notamment la conformité PCI, les principaux fournisseurs de cloud et serveurs web doivent cesser de prendre en charge les versions TLS antérieures à 1.2. Les projets Xamarin créés dans les versions précédentes de Visual Studio utilisent par défaut des versions antérieures de TLS.
Pour vous assurer que vos applications continuent à fonctionner avec ces serveurs et services, vous devez mettre à jour vos projets Xamarin avec les Android HttpClient
paramètres et Native TLS 1.2
indiqués ci-dessous, puis recréer et redéployer vos applications sur vos utilisateurs.
La configuration HttpClient Xamarin.Android se trouve dans Options > du projet Options Android, puis cliquez sur le bouton Options avancées .
Voici les paramètres recommandés pour la prise en charge de TLS 1.2 :
Autres options de configuration
AndroidClientHandler
AndroidClientHandler est le nouveau gestionnaire qui délègue au code Java/OS natif au lieu d’implémenter tout dans le code managé. C'est l'option recommandée.
Avantages
- Utilisez l’API native pour de meilleures performances et une taille d’exécutable plus petite.
- Prise en charge des normes les plus récentes, par exemple TLS 1.2.
Inconvénients
- Nécessite Android 4.1 ou version ultérieure.
- Certaines fonctionnalités/options HttpClient ne sont pas disponibles.
Géré (HttpClientHandler)
Le gestionnaire managé est le gestionnaire HttpClient complètement managé qui a été fourni avec les versions précédentes de Xamarin.Android.
Avantages
- Il s’agit des (fonctionnalités) les plus compatibles avec MS .NET et les versions antérieures de Xamarin.
Inconvénients
- Il n’est pas entièrement intégré au système d’exploitation (par exemple, limité à TLS 1.0).
- Il est généralement beaucoup plus lent (par exemple, le chiffrement) que l’API native.
- Il nécessite davantage de code managé, ce qui crée des applications plus volumineuses.
Choix d’un gestionnaire
Le choix entre AndroidClientHandler
et HttpClientHandler
dépend des besoins de votre application.
AndroidClientHandler
est recommandé pour la prise en charge de la sécurité la plus récente, par exemple.
- Vous avez besoin de la prise en charge de TLS 1.2+ .
- Votre application cible Android 4.1 (API 16) ou version ultérieure.
- Vous avez besoin de la prise en charge de TLS 1.2+ pour
HttpClient
. - Vous n’avez pas besoin de la prise en charge de TLS 1.2+ pour
WebClient
.
HttpClientHandler
est un bon choix si vous avez besoin de la prise en charge de TLS 1.2+ mais que vous devez prendre en charge les versions d’Android antérieures à Android 4.1. Il s’agit également d’un bon choix si vous avez besoin de la prise en charge de TLS 1.2+ pour WebClient
.
À compter de Xamarin.Android 8.3, HttpClientHandler
la valeur par défaut est Boring SSL (btls
) comme fournisseur TLS sous-jacent. Le fournisseur TLS SSL ennuyeux offre les avantages suivants :
- Il prend en charge TLS 1.2+.
- Il prend en charge toutes les versions d’Android.
- Il fournit la prise en charge de TLS 1.2+ pour et
HttpClient
WebClient
.
L’inconvénient de l’utilisation de Boring SSL comme fournisseur TLS sous-utilisé est qu’il peut augmenter la taille de l’APK résultant (il ajoute environ 1 Mo de taille APK supplémentaire par ABI pris en charge).
À compter de Xamarin.Android 8.3, le fournisseur TLS par défaut est SSL ennuyeux (btls
). Si vous ne souhaitez pas utiliser ssl boring, vous pouvez revenir à l’implémentation SSL managée historique en définissant la propriété legacy
sur (pour plus d’informations sur la $(AndroidTlsProvider)
définition des propriétés de build, consultez Processus de génération).
Utilisation programmatique AndroidClientHandler
Est Xamarin.Android.Net.AndroidClientHandler
une HttpMessageHandler
implémentation spécifique pour Xamarin.Android.
Les instances de cette classe utilisent l’implémentation native java.net.URLConnection
pour toutes les connexions HTTP. Cela permet théoriquement d’augmenter les performances HTTP et de réduire les tailles d’APK.
Cet extrait de code est un exemple de façon explicite pour une seule instance de la HttpClient
classe :
// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());
Notes
L’appareil Android sous-jacent doit prendre en charge TLS 1.2 (par exemple. Android 4.1 et versions ultérieures). Notez que la prise en charge officielle de TLS 1.2 est dans Android 5.0+. Toutefois, certains appareils prennent en charge TLS 1.2 dans Android 4.1+.
Option de génération d’implémentation SSL/TLS
Cette option de projet contrôle la bibliothèque TLS sous-jacente qui sera utilisée par toutes les requêtes web, à la fois HttpClient
et WebRequest
. Par défaut, TLS 1.2 est sélectionné :
Par exemple :
var client = new HttpClient();
Si l’implémentation HttpClient a été définie sur Managed et que l’implémentation TLS a été définie sur Native TLS 1.2+, l’objet client
utilise automatiquement le managé HttpClientHandler
et TLS 1.2 (fourni par la bibliothèque BoringSSL) pour ses requêtes HTTP.
Toutefois, si l’implémentation HttpClient est définie sur AndroidHttpClient
, tous les HttpClient
objets utilisent la classe java.net.URLConnection
Java sous-jacente et ne sont pas affectés par la valeur d’implémentation TLS/SSL .
WebRequest
les objets utilisent la bibliothèque BoringSSL.
Autres façons de contrôler la configuration SSL/TLS
Une application Xamarin.Android peut contrôler les paramètres TLS de trois façons :
- Sélectionnez l’implémentation HttpClient et la bibliothèque TLS par défaut dans options du projet.
- Utilisation programmatique de
Xamarin.Android.Net.AndroidClientHandler
. - Déclarez des variables d’environnement (facultatif).
Parmi les trois choix, l’approche recommandée consiste à utiliser les options de projet Xamarin.Android pour déclarer la valeur par défaut HttpMessageHandler
et TLS pour l’ensemble de l’application. Ensuite, si nécessaire, instanciez Xamarin.Android.Net.AndroidClientHandler
des objets par programmation. Ces options sont décrites ci-dessus.
La troisième option, l’utilisation de variables d’environnement, est expliquée ci-dessous.
Déclarer des variables d’environnement
Deux variables d’environnement sont liées à l’utilisation de TLS dans Xamarin.Android :
XA_HTTP_CLIENT_HANDLER_TYPE
: cette variable d’environnement déclare la valeur par défautHttpMessageHandler
que l’application utilisera. Par exemple :XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
XA_TLS_PROVIDER
: cette variable d’environnement déclare la bibliothèque TLS qui sera utilisée,btls
,legacy
oudefault
(ce qui équivaut à omettre cette variable) :XA_TLS_PROVIDER=btls
Cette variable d’environnement est définie en ajoutant un fichier d’environnement au projet. Un fichier d’environnement est un fichier de texte brut au format Unix avec une action de génération d’AndroidEnvironment :
Pour plus d’informations sur les variables d’environnement et Xamarin.Android, consultez le Guide de l’environnement Xamarin.Android .