HttpClient Stack und SSL/TLS-Implementierungsauswahl für Android
Die Selektoren HttpClient Stack und SSL/TLS-Implementierung bestimmen die HttpClient- und SSL/TLS-Implementierung, die von Ihren Xamarin.Android-Apps verwendet werden.
Projekte müssen auf die Assembly System.Net.Http verweisen.
Warnung
April 2018 – Aufgrund erhöhter Sicherheitsanforderungen, einschließlich PCI-Compliance, wird erwartet, dass die wichtigsten Cloudanbieter und Webserver tls-Versionen, die älter als 1.2 sind, nicht mehr unterstützen. Xamarin-Projekte, die in früheren Versionen von Visual Studio erstellt wurden, verwenden standardmäßig ältere Versionen von TLS.
Um sicherzustellen, dass Ihre Apps weiterhin mit diesen Servern und Diensten funktionieren, sollten Sie Ihre Xamarin-Projekte mit den Android HttpClient
unten gezeigten Einstellungen und Native TLS 1.2
aktualisieren und dann Ihre Apps neu erstellen und für Ihre Benutzer neu bereitstellen.
Die Xamarin.Android HttpClient-Konfiguration befindet sich unter Projektoptionen > Android-Optionen, und klicken Sie dann auf die Schaltfläche Erweiterte Optionen .
Dies sind die empfohlenen Einstellungen für TLS 1.2-Unterstützung:
Alternative Konfigurationsoptionen
AndroidClientHandler
AndroidClientHandler ist der neue Handler, der nativen Java/OS-Code delegiert, anstatt alles in verwaltetem Code zu implementieren. Dies ist die empfohlene Option.
Vorteile
- Verwenden Sie die native API, um die Leistung zu verbessern und die größe der ausführbaren Dateien zu verkleineren.
- Unterstützung für die neuesten Standards, z. B. TLS 1.2.
Nachteile
- Erfordert Android 4.1 oder höher.
- Einige HttpClient-Features/Optionen sind nicht verfügbar.
Verwaltet (HttpClientHandler)
Der verwaltete Handler ist der vollständig verwaltete HttpClient-Handler, der mit früheren Xamarin.Android-Versionen ausgeliefert wurde.
Vorteile
- Es ist die am besten kompatiblen (Features) mit MS .NET und älteren Xamarin-Versionen.
Nachteile
- Es ist nicht vollständig in das Betriebssystem integriert (z. B. beschränkt auf TLS 1.0).
- Es ist in der Regel viel langsamer (z. B. Verschlüsselung) als die native API.
- Es erfordert mehr verwalteten Code, wodurch größere Anwendungen erstellt werden.
Auswählen eines Handlers
Die Wahl zwischen AndroidClientHandler
und HttpClientHandler
hängt von den Anforderungen Ihrer Anwendung ab.
AndroidClientHandler
wird für den aktuellsten Sicherheitssupport empfohlen, z. B.
- Sie benötigen TLS 1.2+ Unterstützung.
- Ihre App ist für Android 4.1 (API 16) oder höher ausgerichtet.
- Sie benötigen TLS 1.2+ Unterstützung für
HttpClient
. - Sie benötigen keine TLS 1.2+ Unterstützung für
WebClient
.
HttpClientHandler
ist eine gute Wahl, wenn Sie TLS 1.2+ Unterstützung benötigen, aber Versionen von Android vor Android 4.1 unterstützen müssen. Es ist auch eine gute Wahl, wenn Sie TLS 1.2+ Unterstützung für WebClient
benötigen.
Ab Xamarin.Android 8.3 wird HttpClientHandler
standardmäßig Boring SSL (btls
) als zugrunde liegender TLS-Anbieter verwendet. Der Boring SSL TLS-Anbieter bietet die folgenden Vorteile:
- Es unterstützt TLS 1.2 und höher.
- Es werden alle Android-Versionen unterstützt.
- Es bietet TLS 1.2+ Unterstützung für und
HttpClient
WebClient
.
Der Nachteil der Verwendung von Boring SSL als untergeordnetem TLS-Anbieter ist, dass die Größe des resultierenden APK erhöht werden kann (es fügt etwa 1 MB zusätzliche APK-Größe pro unterstützter ABI hinzu).
Ab Xamarin.Android 8.3 ist der TLS-Standardanbieter Boring SSL (btls
). Wenn Sie boring SSL nicht verwenden möchten, können Sie rückgängig machen zur historischen verwalteten SSL-Implementierung, indem Sie die $(AndroidTlsProvider)
-Eigenschaft auf legacy
festlegen (weitere Informationen zum Festlegen von Buildeigenschaften finden Sie unter Buildprozess).
Programmgesteuerte Verwendung AndroidClientHandler
Das Xamarin.Android.Net.AndroidClientHandler
ist eine HttpMessageHandler
Implementierung speziell für Xamarin.Android.
Instanzen dieser Klasse verwenden die native java.net.URLConnection
Implementierung für alle HTTP-Verbindungen. Dies sorgt theoretisch für eine Steigerung der HTTP-Leistung und kleinere APK-Größen.
Dieser Codeausschnitt ist ein Beispiel für die explizite Verwendung eines einzelnen instance der HttpClient
-Klasse:
// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());
Hinweis
Das zugrunde liegende Android-Gerät muss TLS 1.2 (dh. Android 4.1 und höher). Bitte beachten Sie, dass die offizielle Unterstützung für TLS 1.2 in Android 5.0 und höher ist. Einige Geräte unterstützen jedoch TLS 1.2 in Android 4.1 und höher.
Buildoption für die SSL/TLS-Implementierung
Diese Projektoption steuert, welche zugrunde liegende TLS-Bibliothek von allen Webanforderungen verwendet wird, sowohl als auch HttpClient
WebRequest
. Standardmäßig ist TLS 1.2 ausgewählt:
Beispiel:
var client = new HttpClient();
Wenn die HttpClient-Implementierung auf Verwaltet und die TLS-Implementierung auf Native TLS 1.2+ festgelegt wurde, verwendet das client
Objekt automatisch die verwaltete HttpClientHandler
und TLS 1.2 (von der BoringSSL-Bibliothek bereitgestellt) für seine HTTP-Anforderungen.
Wenn die HttpClient-Implementierung jedoch auf AndroidHttpClient
festgelegt ist, verwenden alle HttpClient
Objekte die zugrunde liegende Java-Klasse java.net.URLConnection
und sind vom TLS/SSL-Implementierungswert nicht betroffen.
WebRequest
-Objekte würden die BoringSSL-Bibliothek verwenden.
Andere Möglichkeiten zum Steuern der SSL/TLS-Konfiguration
Es gibt drei Möglichkeiten, wie eine Xamarin.Android-Anwendung die TLS-Einstellungen steuern kann:
- Wählen Sie die HttpClient-Implementierung und die TLS-Standardbibliothek in den Projektoptionen aus.
- Programmgesteuerte Verwendung von
Xamarin.Android.Net.AndroidClientHandler
. - Deklarieren Sie Umgebungsvariablen (optional).
Von den drei Optionen wird empfohlen, die Xamarin.Android-Projektoptionen zu verwenden, um den Standardwert HttpMessageHandler
und TLS für die gesamte App zu deklarieren. Anschließend instanziieren Xamarin.Android.Net.AndroidClientHandler
Sie objekte bei Bedarf programmgesteuert. Diese Optionen werden oben beschrieben.
Die dritte Option – die Verwendung von Umgebungsvariablen – wird unten erläutert.
Deklarieren von Umgebungsvariablen
Es gibt zwei Umgebungsvariablen, die sich auf die Verwendung von TLS in Xamarin.Android beziehen:
XA_HTTP_CLIENT_HANDLER_TYPE
– Diese Umgebungsvariable deklariert den StandardwertHttpMessageHandler
, den die Anwendung verwendet. Beispiel:XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
XA_TLS_PROVIDER
– Diese Umgebungsvariable deklariert, welche TLS-Bibliothek verwendet wird, entwederbtls
,legacy
oderdefault
(was mit dem Weglassen dieser Variablen identisch ist):XA_TLS_PROVIDER=btls
Diese Umgebungsvariable wird festgelegt, indem dem Projekt eine Umgebungsdatei hinzugefügt wird. Eine Umgebungsdatei ist eine Unix-formatierte Nur-Text-Datei mit einer Buildaktion von AndroidEnvironment:
Weitere Informationen zu Umgebungsvariablen und Xamarin.Android finden Sie im Leitfaden zur Xamarin.Android-Umgebung .