Sdílet prostřednictvím


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:

Visual Studio Android Options

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 i WebClient.

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 (btlsBoring 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 WebRequesttaké . 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:

  1. V možnostech projektu vyberte implementaci HttpClient a výchozí knihovnu TLS.
  2. Programově pomocí Xamarin.Android.Net.AndroidClientHandler.
  3. 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í hodnotu HttpMessageHandler , 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, legacynebo default (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 .