Zásobník HttpClient a selektor implementace SSL/TLS pro Android

Selektory zásobníku HttpClient a implementace 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.

Upozornění

Duben 2018 – Vzhledem ke zvýšeným požadavkům na zabezpečení, včetně dodržování předpisů PCI, se očekává, že hlavní poskytovatelé cloudu a webové servery přestanou podporovat verze protokolu TLS starší než 1.2. Projekty Xamarin vytvořené v předchozích verzích Visual Studio ve výchozím nastavení používají starší verze protokolu TLS.

Pokud chcete zajistit, aby vaše aplikace dál fungovaly s těmito servery a službami, měli byste projekty Xamarin Native TLS 1.2 aktualizovat pomocí níže uvedených nastavení a a pak aplikace znovu sestavit a znovu nasadit pro uživatele.

Konfigurace HttpClient pro Xamarin.Android je v Project Možnosti Androidua potom klikněte na tlačítko Upřesnit možnosti.

Toto jsou doporučená nastavení pro podporu protokolu TLS 1.2:

Visual Studio možností Androidu

Alternativní možnosti konfigurace

AndroidClientHandler

AndroidClientHandler je nová obslužná rutina, která místo implementace všeho ve spravovaném kódu deleguje nativní kód Java/OS. Toto je doporučená možnost.

Výhody

  • Pro lepší výkon a menší velikost spustitelného souboru použijte 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 nebo možnosti HttpClient nejsou k dispozici.

Managed (HttpClientHandler)

Spravovaná obslužná rutina je plně spravovaná obslužná rutina HttpClient dodána s předchozími verzemi Xamarin.Android.

Výhody

  • Jedná se o nej kompatibilní (funkce) s MS .NET a staršími verzemi Xamarinu.

Nevýhody

  • Není plně integrovaný s operačním systémem (např. omezeno 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áření větších aplikací.

Výběr obslužné rutiny

Volba mezi AndroidClientHandlerHttpClientHandler a závisí na potřebách vaší aplikace. AndroidClientHandler se doporučuje pro aktuální podporu zabezpečení, např.

  • Vyžadujete podporu protokolu TLS 1.2 nebo více.
  • Vaše aplikace cílí na Android 4.1 (API 16) nebo novější.
  • Potřebujete podporu protokolu TLS 1.2+ pro HttpClient .
  • Pro nepotřebujete podporu protokolu TLS 1.2 nebo WebClient více.

HttpClientHandler je dobrou volbou, pokud potřebujete podporu protokolu 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 nebo více pro WebClient .

Počínaje Xamarin.Androidem 8.3 má jako základního poskytovatele PROTOKOLU TLS výchozí hodnotu HttpClientHandler Ásmíce SSL ( btls ). Tento poskytovatel protokolu SSL TLS nabízí následující výhody:

  • Podporuje protokol TLS 1.2+.
  • Podporuje všechny verze Androidu.
  • Poskytuje podporu protokolu TLS 1.2+ pro i HttpClientWebClient .

Nevýhodou použití softwarového ssl jako podceňujícího poskytovatele TLS je, že může zvětšit velikost výsledného souboru APK (přičte přibližně 1 MB další velikosti souboru APK na podporovanou verzi ABI).

Počínaje Xamarin.Androidem 8.3 je výchozím poskytovatelem protokolu TLS Ssl ( btls ). Pokud nechcete používat ádný protokol SSL, můžete se vrátit k historické spravované implementaci SSL nastavením vlastnosti na (další informace o nastavení vlastností sestavení najdete v $(AndroidTlsProvider)legacy tématu Proces $(AndroidTlsProvider)

Programově použití AndroidClientHandler

je Xamarin.Android.Net.AndroidClientHandler implementace HttpMessageHandler specificky pro Xamarin.Android. Instance této třídy budou používat nativní java.net.URLConnection implementaci pro všechna připojení HTTP. Teoreticky se tím 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 (např. Android 4.1 a novější). Upozorňujeme, že oficiální podpora protokolu TLS 1.2 je v Androidu 5.0+. Některá zařízení ale podporují protokol TLS 1.2 v Androidu 4.1+.

Možnost sestavení implementace SSL/TLS

Tato možnost projektu určuje, jakou základní knihovnu TLS budou používat všechny webové požadavky, HttpClient a to i WebRequest . Ve výchozím nastavení je vybraný protokol TLS 1.2:

Například:

var client = new HttpClient();

Pokud byla implementace HttpClient nastavená na Managed (Spravovaná) a implementace protokolu TLS byla nastavená na Native TLS 1.2+ (Nativní protokol TLS 1.2+),objekt by pro své požadavky HTTP automaticky používá spravovaný protokol TLS a protokol TLS 1.2 (poskytovaný knihovnou Jessl).

Pokud je ale implementace HttpClient nastavená na , pak budou všechny objekty používat základní třídu Java a hodnota implementace HttpClientjava.net.URLConnectionHttpClient to neovlvlní. WebRequest Objekty budou používat knihovnu ÁSSL o chystech.

Další způsoby řízení konfigurace SSL/TLS

Existují tři způsoby, jak může aplikace Xamarin.Android řídit nastavení protokolu TLS:

  1. V části Možnosti připojení vyberte implementaci HttpClient a Project 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 deklaraci výchozího a HttpMessageHandler TLS pro celou aplikaci. Pak v případě potřeby vytvořte instanci objektů prostřednictvím kódu Xamarin.Android.Net.AndroidClientHandler programu. Tyto možnosti jsou popsané 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žíváním protokolu TLS v Xamarin.Androidu:

  • XA_HTTP_CLIENT_HANDLER_TYPE – Tato proměnná prostředí deklaruje HttpMessageHandler výchozí hodnotu, kterou bude aplikace používat. Například:

    XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
    
  • XA_TLS_PROVIDER – Tato proměnná prostředí bude deklarovat, která knihovna TLS se použije, buď , nebo (která je stejná jako btlslegacydefault vynechání této proměnné):

    XA_TLS_PROVIDER=btls
    

Tato proměnná prostředí se nastavuje přidáním souboru prostředí do projektu. Soubor prostředí je soubor prostého textu ve formátu Unixu s akcí sestavení AndroidEnvironment:

Další podrobnosti o proměnných prostředí a Xamarin.Android najdete v průvodci prostředím Xamarin.Android.