Aracılığıyla paylaş


Android için HttpClient Stack ve SSL/TLS Uygulama Seçicisi

HttpClient Stack 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 derlemesine başvurması gerekir.

Uyarı

Nisan 2018 – PCI uyumluluğu da 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. Visual Studio'nun önceki sürümlerinde oluşturulan Xamarin projeleri varsayılan olarak TLS'nin eski sürümlerini kullanır.

Uygulamalarınızın bu sunucu ve hizmetlerle çalışmaya devam ettiğinden emin olmak için Xamarin projelerinizi aşağıda gösterilen ve Native TLS 1.2 ayarlarıyla Android HttpClient güncelleştirmeniz, ardından uygulamalarınızı yeniden oluşturup kullanıcılarınıza yeniden dağıtmanız gerekir.

Xamarin.Android HttpClient yapılandırması, Project Seçenekleri Android Seçenekleri'ndedir >ve gelişmiş seçenekler düğmesine tıklayın.

TLS 1.2 desteği için önerilen ayarlar şunlardır:

Visual Studio Android Options

Alternatif yapılandırma seçenekleri

AndroidClientHandler

AndroidClientHandler, yönetilen koddaki her şeyi uygulamak yerine yerel Java/OS koduna temsilcilik eden yeni işleyicidir. Önerilen seçenek budur.

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 üzerini gerektirir.
  • Bazı HttpClient özellikleri/seçenekleri kullanılamaz.

Managed (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).

Dezavantajlar

  • İşletim sistemiyle tam olarak tümleştirilmemiştir (örneğin, TLS 1.0 ile sınırlıdır).
  • Genellikle yerel API'den çok daha yavaştır (örn. şifreleme).
  • Daha büyük uygulamalar oluşturarak daha fazla yönetilen kod gerektirir.

İşleyici Seçme

ve HttpClientHandler arasında AndroidClientHandler seçim, uygulamanızın gereksinimlerine bağlıdır. AndroidClientHandler en güncel güvenlik desteği için önerilir, örneğin.

  • TLS 1.2+ desteğine ihtiyacınız vardır.
  • Uygulamanız Android 4.1 (API 16) veya sonraki sürümleri hedefleiyor.
  • için TLS 1.2+ desteğine HttpClientihtiyacınız vardır.
  • için WebClientTLS 1.2+ desteğine ihtiyacınız yoktur.

HttpClientHandler TLS 1.2+ desteğine ihtiyacınız varsa ancak Android 4.1'den önceki Android sürümlerini desteklemeniz gerekiyorsa iyi bir seçimdir. için TLS 1.2+ desteğine WebClientihtiyacınız varsa da iyi bir seçimdir.

Xamarin.Android 8.3 sürümünden başlayarak, HttpClientHandler temel TLS sağlayıcısı olarak varsayılan olarak Sıkıcı SSL (btls) kullanılır. Sıkıcı SSL TLS sağlayıcısı aşağıdaki avantajları sunar:

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

Yetersiz TLS sağlayıcısı olarak Sıkıcı SSL kullanmanın dezavantajı, sonuçta elde edilen APK boyutunu artırabilmesidir (desteklenen ABI başına yaklaşık 1 MB ek APK boyutu ekler).

Xamarin.Android 8.3 sürümünden itibaren varsayılan TLS sağlayıcısı Sıkıcı SSL 'dir (btls). Sıkıcı SSL kullanmak istemiyorsanız, özelliğini legacy olarak ayarlayarak geçmiş yönetilen SSL uygulamasına $(AndroidTlsProvider) geri dönebilirsiniz (derleme özelliklerini ayarlama hakkında daha fazla bilgi için bkz. Derleme İşlemi).

Program Aracılığıyla Kullanma AndroidClientHandler

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

Bu kod parçacığı, sınıfın tek bir örneği için açıkça nasıl yapılacağını gösteren HttpClient bir ö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ın TLS 1.2'yi (yani. Android 4.1 ve üzeri). TLS 1.2 için resmi desteğin Android 5.0+'da olduğunu lütfen unutmayın. Ancak bazı cihazlar Android 4.1+ işletim sistemindeki TLS 1.2'i destekler.

SSL/TLS uygulama derleme seçeneği

Bu proje seçeneği, hem hem de HttpClient WebRequesttüm web istekleri tarafından hangi temel TLS kitaplığının kullanılacağını denetler. Varsayılan olarak TLS 1.2 seçilidir:

Örneğin:

var client = new HttpClient();

HttpClient uygulaması Yönetilen ve TLS uygulaması Yerel TLS 1.2+ olarak ayarlandıysa, client nesne HTTP istekleri için otomatik olarak yönetilen HttpClientHandler ve TLS 1.2 'yi (BoringSSL kitaplığı tarafından sağlanır) kullanır.

Ancak, HttpClient uygulaması olarak ayarlanırsa, tüm HttpClient nesneler temel alınan Java sınıfını java.net.URLConnection kullanır ve TLS/SSL uygulama değerinden etkilenmez.AndroidHttpClient WebRequest nesneleri BoringSSL kitaplığını kullanır.

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

Xamarin.Android uygulamasının TLS ayarlarını denetlemesinin üç yolu vardır:

  1. Proje Seçenekleri'nde HttpClient uygulamasını ve varsayılan TLS kitaplığını seçin.
  2. kullanarak Xamarin.Android.Net.AndroidClientHandlerprogram aracılığıyla.
  3. Ortam değişkenlerini bildirme (isteğe bağlı).

Üç seçenek arasında önerilen yaklaşım, tüm uygulama için varsayılan HttpMessageHandler ve TLS'yi bildirmek üzere Xamarin.Android proje seçeneklerini kullanmaktır. Daha sonra gerekirse, program aracılığıyla nesnelerin örneğini oluşturun Xamarin.Android.Net.AndroidClientHandler . Bu seçenekler yukarıda açıklanmıştır.

Ortam değişkenlerini kullanarak üçüncü seçenek aşağıda açıklanmıştır.

Ortam Değişkenlerini Bildirme

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 kullanacağı varsayılan HttpMessageHandler değeri bildirir. Örneğin:

    XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
    
  • XA_TLS_PROVIDER– Bu ortam değişkeni , veya default (bu değişkenin atlanmasıyla aynıdır) hangi TLS kitaplığının kullanılacağını btlslegacybildirir:

    XA_TLS_PROVIDER=btls
    

Bu ortam değişkeni, projeye bir ortam dosyası eklenerek ayarlanır. Ortam dosyası, AndroidEnvironment derleme eylemine sahip Unix biçimli bir 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.