Zásobník HttpClient a selektor implementace PROTOKOLU SSL/TLS pro Android
Selektory implementace httpClient a SSL/TLS určují implementaci HttpClient a SSL/TLS, kterou budou používat vaše aplikace Xamarin.Android.
Projekty musí odkazovat na sestavení System.Net.Http .
Upozorňující
Duben 2018 – Kvůli zvýšeným požadavkům na zabezpečení, včetně dodržování předpisů PCI, očekává se, že hlavní poskytovatelé cloudu a webové servery přestanou podporovat verze TLS starší než 1.2. Projekty Xamarin vytvořené v předchozích verzích sady Visual Studio ve výchozím nastavení používají starší verze protokolu TLS.
Abyste zajistili, že vaše aplikace budou dál fungovat s těmito servery a službami, měli byste projekty Xamarin aktualizovat pomocí Android HttpClient
níže uvedených nastavení a Native TLS 1.2
pak znovu sestavovat a znovu nasazovat aplikace pro uživatele.
Konfigurace HttpClient Xamarin.Android je v možnostech aplikace Project Možnosti > Androidu a potom klepněte na tlačítko Upřesnit možnosti .
Toto jsou doporučená nastavení pro podporu protokolu TLS 1.2:
Alternativní možnosti konfigurace
AndroidClientHandler
AndroidClientHandler je nová obslužná rutina, která místo implementace všeho ve spravovaném kódu deleguje na nativní kód Java/OS. Toto je doporučená možnost.
Výhody
- Pro lepší výkon a menší velikost spustitelného souboru používejte nativní rozhraní API.
- Podpora nejnovějších standardů, např. TLS 1.2.
Nevýhody
- Vyžaduje Android 4.1 nebo novější.
- Některé funkce/možnosti HttpClient nejsou k dispozici.
Spravovaná (HttpClientHandler)
Spravovaná obslužná rutina je plně spravovaná obslužná rutina HttpClient, která byla dodána s předchozími verzemi Xamarin.Android.
Výhody
- Jedná se o nejkomppatibilnější (funkce) s MS .NET a staršími verzemi Xamarinu.
Nevýhody
- Není plně integrovaná s operačním systémem (např. omezena na protokol TLS 1.0).
- Obvykle je mnohem pomalejší (např. šifrování) než nativní rozhraní API.
- Vyžaduje více spravovaného kódu a vytváří větší aplikace.
Volba obslužné rutiny
Volba mezi AndroidClientHandler
aplikacemi a HttpClientHandler
závisí na potřebách vaší aplikace. AndroidClientHandler
se doporučuje pro nejaktuálnější podporu zabezpečení, např.
- Vyžadujete podporu protokolu TLS 1.2 nebo novější.
- Vaše aplikace cílí na Android 4.1 (API 16) nebo novější.
- Potřebujete podporu protokolu TLS 1.2+ pro
HttpClient
. - Pro protokol TLS 1.2+ nepotřebujete podporu
WebClient
.
HttpClientHandler
je dobrou volbou, pokud potřebujete podporu tls 1.2 nebo novější, ale musíte podporovat verze Androidu starší než Android 4.1. Je také dobrou volbou, pokud potřebujete podporu protokolu TLS 1.2+ pro WebClient
.
Od Xamarin.Android 8.3 HttpClientHandler
se jako podkladový zprostředkovatel TLS standardně nastaví boring SSL (btls
). Boring SSL TLS provider nabízí následující výhody:
- Podporuje protokol TLS 1.2 nebo novější.
- Podporuje všechny verze Androidu.
- Poskytuje podporu protokolu TLS 1.2+ pro obojí
HttpClient
iWebClient
.
Nevýhodou použití Boring SSL jako podsávacího poskytovatele TLS je, že může zvětšit velikost výsledného APK (přidá asi 1 MB další velikosti APK na podporovanou ABI).
Počínaje Xamarin.Android 8.3 je výchozím zprostředkovatelem TLS boring SSL (btls
Boring SSL). Pokud nechcete používat Boring SSL, můžete se vrátit k historické spravované implementaci SSL nastavením $(AndroidTlsProvider)
vlastnosti legacy
(další informace o nastavení vlastností sestavení, viz Proces sestavení).
Programově pomocí AndroidClientHandler
Jedná se Xamarin.Android.Net.AndroidClientHandler
o implementaci určenou HttpMessageHandler
speciálně pro Xamarin.Android.
Instance této třídy budou používat nativní java.net.URLConnection
implementaci pro všechna připojení HTTP. Tím se teoreticky zvýší výkon HTTP a menší velikosti APK.
Tento fragment kódu je příkladem toho, jak explicitně použít jednu instanci HttpClient
třídy:
// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());
Poznámka:
Základní zařízení s Androidem musí podporovat protokol TLS 1.2 (tj. Android 4.1 a novější). Upozorňujeme, že oficiální podpora protokolu TLS 1.2 je v Androidu 5.0 nebo novější. Některá zařízení však podporují protokol TLS 1.2 v Androidu 4.1 nebo novějším.
Možnost sestavení implementace SSL/TLS
Tato možnost projektu řídí, jaké podkladové knihovny TLS budou používat všechny webové požadavky a HttpClient
WebRequest
také . Ve výchozím nastavení je vybraný protokol TLS 1.2:
Příklad:
var client = new HttpClient();
Pokud byla implementace HttpClient nastavena na Managed a implementace protokolu TLS byla nastavena na nativní protokol TLS 1.2+, client
objekt by pro své požadavky HTTP automaticky používal spravované HttpClientHandler
a TLS 1.2 (poskytované knihovnou BoringSSL).
Pokud je však implementace HttpClient nastavena na AndroidHttpClient
, všechny HttpClient
objekty budou používat základní třídu java.net.URLConnection
Java a nebudou ovlivněny hodnotou implementace TLS/SSL. WebRequest
objekty by používaly knihovnu BoringSSL.
Další způsoby řízení konfigurace PROTOKOLU SSL/TLS
Existují tři způsoby, jak může aplikace Xamarin.Android řídit nastavení protokolu TLS:
- V možnostech projektu vyberte implementaci HttpClient a výchozí knihovnu TLS.
- Programově pomocí
Xamarin.Android.Net.AndroidClientHandler
. - Deklarujte proměnné prostředí (volitelné).
Z těchto tří možností doporučujeme použít možnosti projektu Xamarin.Android k deklarování výchozího nastavení HttpMessageHandler
a protokolu TLS pro celou aplikaci. V případě potřeby pak vytvořte instanci objektů prostřednictvím kódu programu Xamarin.Android.Net.AndroidClientHandler
. Tyto možnosti jsou popsány výše.
Třetí možnost – použití proměnných prostředí – je vysvětlena níže.
Deklarace proměnných prostředí
Existují dvě proměnné prostředí, které souvisejí s použitím protokolu TLS v Xamarin.Androidu:
XA_HTTP_CLIENT_HANDLER_TYPE
– Tato proměnná prostředí deklaruje výchozí hodnotuHttpMessageHandler
, kterou bude aplikace používat. Příklad:XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
XA_TLS_PROVIDER
– Tato proměnná prostředí deklaruje, která knihovna TLS se bude používat, buďbtls
,legacy
nebodefault
(která je stejná jako vynechání této proměnné):XA_TLS_PROVIDER=btls
Tato proměnná prostředí je nastavena přidáním souboru prostředí do projektu. Soubor prostředí je soubor ve formátu prostého textu ve formátu Unix s akcí sestavení AndroidEnvironment:
Další podrobnosti o proměnných prostředí a Xamarin.Android najdete v průvodci prostředím Xamarin.Android .