Bagikan melalui


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:

Visual Studio Android Options

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 HttpClientWebClient.

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:

  1. Pilih implementasi HttpClient dan pustaka TLS default di Opsi Proyek.
  2. Secara terprogram menggunakan Xamarin.Android.Net.AndroidClientHandler.
  3. 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 default HttpMessageHandler 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, baik btls, , legacyatau default (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.