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:
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
HttpClient
ihtiyacınız vardır. - için
WebClient
TLS 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 WebClient
ihtiyacı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
WebClient
iç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
WebRequest
tü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:
- Proje Seçenekleri'nde HttpClient uygulamasını ve varsayılan TLS kitaplığını seçin.
- kullanarak
Xamarin.Android.Net.AndroidClientHandler
program aracılığıyla. - 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ılanHttpMessageHandler
değeri bildirir. Örneğin:XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
XA_TLS_PROVIDER
– Bu ortam değişkeni , veyadefault
(bu değişkenin atlanmasıyla aynıdır) hangi TLS kitaplığının kullanılacağınıbtls
legacy
bildirir: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.