HttpClient Stack dan Pemilih Implementasi SSL/TLS untuk Android
Pemilih Implementasi HttpClient Stack dan SSL/TLS menentukan implementasi HttpClient dan SSL/TLS yang akan digunakan oleh aplikasi Xamarin.Android Anda.
Proyek harus mereferensikan rakitan System.Net.Http .
Peringatan
April 2018 – Karena peningkatan persyaratan keamanan, termasuk kepatuhan PCI, penyedia cloud utama dan server web diharapkan berhenti mendukung versi TLS yang lebih lama dari 1.2. Proyek Xamarin yang dibuat di versi Visual Studio sebelumnya default untuk menggunakan versi TLS yang lebih lama.
Untuk memastikan aplikasi Anda terus bekerja dengan server dan layanan ini, Anda harus memperbarui proyek Xamarin dengan pengaturan dan Native TLS 1.2
yang Android HttpClient
ditunjukkan di bawah ini, lalu membangun ulang dan menyebarkan ulang aplikasi Anda kepada pengguna Anda.
Konfigurasi HttpClient Xamarin.Android ada di Opsi Proyek Opsi > Android, lalu klik tombol Opsi Tingkat Lanjut.
Ini adalah pengaturan yang direkomendasikan untuk dukungan TLS 1.2:
Opsi konfigurasi alternatif
AndroidClientHandler
AndroidClientHandler adalah handler baru yang mendelegasikan ke kode Java/OS asli alih-alih menerapkan semuanya dalam kode terkelola. Ini adalah opsi yang direkomendasikan.
Pro
- Gunakan API asli untuk performa yang lebih baik dan ukuran yang dapat dieksekusi yang lebih kecil.
- Dukungan untuk standar terbaru, misalnya. TLS 1.2.
Kontra
- Memerlukan Android 4.1 atau yang lebih baru.
- Beberapa fitur/opsi HttpClient tidak tersedia.
Terkelola (HttpClientHandler)
Handler terkelola adalah handler HttpClient yang dikelola sepenuhnya yang telah dikirim dengan versi Xamarin.Android sebelumnya.
Pro
- Ini adalah (fitur) yang paling kompatibel dengan MS .NET dan versi Xamarin yang lebih lama.
Kontra
- Ini tidak sepenuhnya terintegrasi dengan OS (misalnya, terbatas pada TLS 1.0).
- Biasanya jauh lebih lambat (misalnya enkripsi) daripada API asli.
- Ini membutuhkan kode yang lebih terkelola, membuat aplikasi yang lebih besar.
Memilih Handler
Pilihan antara AndroidClientHandler
dan HttpClientHandler
tergantung pada kebutuhan aplikasi Anda. AndroidClientHandler
disarankan untuk dukungan keamanan terbaru, misalnya.
- Anda memerlukan dukungan TLS 1.2+.
- Aplikasi Anda menargetkan Android 4.1 (API 16) atau yang lebih baru.
- Anda memerlukan dukungan TLS 1.2+ untuk
HttpClient
. - Anda tidak memerlukan dukungan TLS 1.2+ untuk
WebClient
.
HttpClientHandler
adalah pilihan yang baik jika Anda memerlukan dukungan TLS 1.2+ tetapi harus mendukung versi Android yang lebih lama dari Android 4.1. Ini juga merupakan pilihan yang baik jika Anda membutuhkan dukungan TLS 1.2+ untuk WebClient
.
Dimulai dengan Xamarin.Android 8.3, HttpClientHandler
default ke Boring SSL (btls
) sebagai penyedia TLS yang mendasar. Penyedia TLS SSL Yang Membosankan menawarkan keuntungan berikut:
- Ini mendukung TLS 1.2+.
- Ini mendukung semua versi Android.
- Ini menyediakan dukungan TLS 1.2+ untuk dan
HttpClient
WebClient
.
Kerugian menggunakan Boring SSL sebagai penyedia TLS yang mendasar adalah dapat meningkatkan ukuran APK yang dihasilkan (menambahkan sekitar 1MB ukuran APK tambahan per ABI yang didukung).
Dimulai dengan Xamarin.Android 8.3, penyedia TLS default adalah Boring SSL (btls
). Jika Anda tidak ingin menggunakan Boring SSL, Anda dapat kembali ke implementasi SSL terkelola historis dengan mengatur $(AndroidTlsProvider)
properti ke legacy
(untuk informasi selengkapnya tentang mengatur properti build, lihat Proses Build).
Menggunakan Secara Terprogram AndroidClientHandler
ini Xamarin.Android.Net.AndroidClientHandler
adalah HttpMessageHandler
implementasi khusus untuk Xamarin.Android.
Instans kelas ini akan menggunakan implementasi asli java.net.URLConnection
untuk semua koneksi HTTP. Ini secara teoritis akan memberikan peningkatan performa HTTP dan ukuran APK yang lebih kecil.
Cuplikan kode ini adalah contoh cara secara eksplisit untuk satu instans HttpClient
kelas:
// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());
Catatan
Perangkat Android yang mendasar harus mendukung TLS 1.2 (yaitu. Android 4.1 dan yang lebih baru). Harap dicatat bahwa dukungan resmi untuk TLS 1.2 ada di Android 5.0+. Namun beberapa perangkat mendukung TLS 1.2 di Android 4.1+.
Opsi build implementasi SSL/TLS
Opsi proyek ini mengontrol apa yang mendasar pustaka TLS akan digunakan oleh semua permintaan web, baik HttpClient
dan WebRequest
. Secara default, TLS 1.2 dipilih:
Contohnya:
var client = new HttpClient();
Jika implementasi HttpClient diatur ke Dikelola dan implementasi TLS diatur ke Native TLS 1.2+, maka client
objek akan secara otomatis menggunakan HttpClientHandler
TLS 1.2 dan terkelola (disediakan oleh pustaka BoringSSL) untuk permintaan HTTP-nya.
Namun, jika implementasi HttpClient diatur ke AndroidHttpClient
, maka semua HttpClient
objek akan menggunakan kelas java.net.URLConnection
Java yang mendasar dan tidak akan terpengaruh oleh nilai implementasi TLS/SSL. WebRequest
objek akan menggunakan pustaka BoringSSL.
Cara lain untuk mengontrol konfigurasi SSL/TLS
Ada tiga cara agar aplikasi Xamarin.Android dapat mengontrol pengaturan TLS:
- Pilih implementasi HttpClient dan pustaka TLS default di Opsi Proyek.
- Secara terprogram menggunakan
Xamarin.Android.Net.AndroidClientHandler
. - Deklarasikan variabel lingkungan (opsional).
Dari tiga pilihan, pendekatan yang direkomendasikan adalah menggunakan opsi proyek Xamarin.Android untuk mendeklarasikan default HttpMessageHandler
dan TLS untuk seluruh aplikasi. Kemudian, jika perlu, buat Xamarin.Android.Net.AndroidClientHandler
instans objek secara terprogram. Opsi ini dijelaskan di atas.
Opsi ketiga – menggunakan variabel lingkungan – dijelaskan di bawah ini.
Mendeklarasikan Variabel Lingkungan
Ada dua variabel lingkungan yang terkait dengan penggunaan TLS di Xamarin.Android:
XA_HTTP_CLIENT_HANDLER_TYPE
– Variabel lingkungan ini menyatakan defaultHttpMessageHandler
yang akan digunakan aplikasi. Contohnya:XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
XA_TLS_PROVIDER
– Variabel lingkungan ini akan menyatakan pustaka TLS mana yang akan digunakan, baikbtls
, ,legacy
ataudefault
(yang sama dengan menghilangkan variabel ini):XA_TLS_PROVIDER=btls
Variabel lingkungan ini diatur dengan menambahkan file lingkungan ke proyek. File lingkungan adalah file teks biasa berformat Unix dengan tindakan build AndroidEnvironment:
Silakan lihat panduan Lingkungan Xamarin.Android untuk detail selengkapnya tentang variabel lingkungan dan Xamarin.Android.