Android için HttpClient Yığını ve SSL/TLS Uygulama Seçicisi

HttpClient Yığını ve SSL/TLS Uygulama seçicileri, Xamarin.Android uygulamalarınız tarafından kullanılacak HttpClient ve SSL/TLS uygulamasını belirler.

Projelerin System.Net.Http derlemesi'ne başvurusu gerekir.

Uyarı

Nisan 2018 – PCI uyumluluğu dahil olmak üzere artan güvenlik gereksinimleri nedeniyle büyük bulut sağlayıcılarının ve web sunucularının 1.2'den eski TLS sürümlerini desteklemeyi durdurması bekleniyor. Önceki sürümlerinde oluşturulan Xamarin projeleri Visual Studio TLS'nin eski sürümlerini kullanmak için varsayılan olarak kullanılır.

Uygulamalarınızı bu sunucularla ve hizmetlerle çalışmaya devam etmek için, Xamarin Native TLS 1.2 projelerinizi aşağıda gösterilen ve ayarlarıyla güncelleştirmeniz ve ardından uygulamalarınızı yeniden derlemeniz ve kullanıcılarınıza yeniden dağıtmanız gerekir.

Xamarin.Android HttpClient yapılandırması Project Seçenekler Android Seçeneklerialtında ve ardından Gelişmiş Seçenekler düğmesine tıklayın.

TLS 1.2 desteği için önerilen ayarlar:

Visual Studio Android Seçenekleri

Alternatif yapılandırma seçenekleri

AndroidClientHandler

AndroidClientHandler, yönetilen kodda her şeyi uygulamak yerine yerel Java/OS koduna temsilci seçen yeni işleyicidir. Bu önerilen seçenektir.

Avantajlar

  • Daha iyi performans ve daha küçük yürütülebilir boyut için yerel API kullanın.
  • En son standartlar için destek, örneğin. TLS 1.2.

Dezavantajlar

  • Android 4.1 veya sonraki bir sürümü gerektirir.
  • Bazı HttpClient özellikleri/seçenekleri kullanılamaz.

Yönetilen (HttpClientHandler)

Yönetilen işleyici, önceki Xamarin.Android sürümleriyle birlikte gönderilen tam olarak yönetilen HttpClient işleyicisidir.

Avantajlar

  • MS .NET ve eski Xamarin sürümleriyle en uyumlu (özellikler) bu özelliktir.

Dezavantajlar

  • Tam olarak işletim sistemiyle tümleşik değildir (örn. TLS 1.0 ile sınırlıdır).
  • Genellikle çok daha yavaştır (örn. yerel API'ye göre şifreleme).
  • Daha büyük uygulamalar oluşturmak için daha fazla yönetilen kod gerektirir.

İşleyici Seçme

ve arasındaki AndroidClientHandlerHttpClientHandler seçim, uygulamanın ihtiyaçlarına bağlıdır. AndroidClientHandler en güncel güvenlik desteği için önerilir, örneğin.

  • TLS 1.2+ desteğine ihtiyaç vardır.
  • Uygulamanız Android 4.1 (API 16) veya sonraki bir sürümü hedefledi.
  • için TLS 1.2+ desteğine ihtiyacınız HttpClient vardır.
  • için TLS 1.2+ desteğine ihtiyacınız WebClient yok.

HttpClientHandler TLS 1.2+ desteğine ihtiyacınız varsa ancak Android 4.1'den önceki Android sürümlerini desteklemeniz gerekirse iyi bir seçenektir. ayrıca için TLS 1.2+ desteğine ihtiyacınız varsa iyi bir WebClient seçenektir.

Xamarin.Android 8.3'den itibaren, temel TLS sağlayıcısı olarak varsayılan olarak En sık ssl HttpClientHandler ( btls ) kullanılır. Sıkıcı SSL TLS sağlayıcısı aşağıdaki avantajları sunar:

  • TLS 1.2+'yi destekler.
  • Tüm Android sürümlerini destekler.
  • Hem hem de için TLS 1.2+ HttpClient desteği WebClient sağlar.

Altta yer alan TLS sağlayıcısı olarak Sıkıcı SSL kullanmanın dezavantajı, sonuçta elde edilen APK'nin boyutunu artırabiliyor olmasıdır (desteklenen ABI başına yaklaşık 1 MB ek APK boyutu ekler).

Xamarin.Android 8.3'den itibaren varsayılan TLS sağlayıcısı, Ssl'yi Sıkıyor ( ) btls olur. Sıkıcı SSL kullanmak istemiyorsanız, özelliğini olarak ayarerek geçmiş yönetilen SSL uygulamasına geri dönebilirsiniz (derleme özelliklerini ayarlama hakkında daha fazla bilgi için $(AndroidTlsProvider)legacy bkz. $(AndroidTlsProvider)

ProgramLı Olarak Kullanma AndroidClientHandler

, Xamarin.Android.Net.AndroidClientHandler özel olarak HttpMessageHandler Xamarin.Android için bir uygulamadır. Bu sınıfın örnekleri tüm HTTP bağlantıları java.net.URLConnection için yerel uygulama kullanır. Bu, teorik olarak HTTP performansında bir artış ve daha küçük APK boyutları sağlar.

Bu kod parçacığı, sınıfın tek bir örneği için açıkça nasıl bir HttpClient örnektir:

// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());

Not

Temel Alınan Android cihazı TLS 1.2'yi desteklemeli (yani. Android 4.1 ve sonrası). TLS 1.2 için resmi desteğin Android 5.0+'da olduğunu lütfen unutmayın. Ancak bazı cihazlar Android 4.1+'da TLS 1.2'yi destekler.

SSL/TLS uygulama derleme seçeneği

Bu proje seçeneği, tüm web isteği tarafından hangi temel TLS kitaplığının (hem hem de ) kullan olacağını HttpClient kontrol WebRequest eder. Varsayılan olarak TLS 1.2 seçilidir:

Örnek:

var client = new HttpClient();

HttpClient uygulaması Yönetilen olarak ayarlanmışsa ve TLS uygulaması Yerel TLS 1.2+olarak ayarlanmışsa, nesne HTTP istekleri için yönetilen ve TLS 1.2'yi (1.2 Kitaplığı tarafından sağlanır) otomatik olarak kullanır.

Ancak, HttpClient uygulaması olarak ayarlanırsa, tüm nesneler temel Alınan Java sınıfını kullanır ve HttpClientjava.net.URLConnectionHttpClient uygulama değerinden etkilenmez. WebRequest nesneleri, BurnesSL kitaplığını kullanır.

SSL/TLS yapılandırmasını denetlemenin diğer yolları

Xamarin.Android uygulamasının TLS ayarlarını denetlemesi için üç yol vardır:

  1. Project Seçenekler'de HttpClient uygulamasını ve varsayılan TLS Project seçin.
  2. kullanarak programlı Xamarin.Android.Net.AndroidClientHandler olarak.
  3. Ortam değişkenlerini bildir (isteğe bağlı).

Önerilen üç seçenek arasında, uygulamanın tamamı için varsayılan ve TLS'yi bildirecek Xamarin.Android HttpMessageHandler proje seçeneklerini kullanmak önerilir. Ardından gerekirse, program aracılığıyla nesnelerin örneğini Xamarin.Android.Net.AndroidClientHandler oluşturma. Bu seçenekler yukarıda açıklanmıştır.

Üçüncü seçenek olan ortam değişkenlerini kullanma aşağıda açıklanmıştır.

Ortam Değişkenlerini Bildir

Xamarin.Android'de TLS kullanımıyla ilgili iki ortam değişkeni vardır:

  • XA_HTTP_CLIENT_HANDLER_TYPE – Bu ortam değişkeni, uygulamanın HttpMessageHandler kullanabileceği varsayılanı bildirmektedir. Örnek:

    XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
    
  • XA_TLS_PROVIDER – Bu ortam değişkeni, hangi TLS kitaplığının ( veya ) (bu değişkeni btlslegacydefault atla aynı) olacağını bildirecek:

    XA_TLS_PROVIDER=btls
    

Bu ortam değişkeni, projeye bir ortam dosyası ek tarafından ayarlanır. Ortam dosyası, AndroidEnvironmentderleme eylemine sahip Unix biçimli düz metin dosyasıdır:

Ortam değişkenleri ve Xamarin.Android hakkında daha fazla bilgi için lütfen Xamarin.Android Ortamı kılavuzuna bakın.