Keamanan Transportasi Aplikasi di Xamarin.iOS
App Transport Security (ATS) memberlakukan koneksi aman antara sumber daya internet (seperti server back-end aplikasi) dan aplikasi Anda.
Artikel ini akan memperkenalkan perubahan keamanan yang diterapkan App Transport Security pada aplikasi iOS 9 dan apa artinya untuk proyek Xamarin.iOS Anda, ini akan mencakup opsi konfigurasi ATS dan akan mencakup cara menolak ATS ATS jika diperlukan. Karena ATS diaktifkan secara default, koneksi internet yang tidak aman akan menimbulkan pengecualian di aplikasi iOS 9 (kecuali Anda telah secara eksplisit mengizinkannya).
Tentang Keamanan Transportasi Aplikasi
Seperti yang dinyatakan di atas, ATS memastikan bahwa semua komunikasi internet di iOS 9 dan OS X El Capitan sesuai dengan praktik terbaik koneksi yang aman, sehingga mencegah pengungkapan informasi sensitif yang tidak disengaja baik secara langsung melalui aplikasi Atau pustaka yang dikonsumsinya.
Untuk aplikasi yang ada, terapkan HTTPS
protokol jika memungkinkan. Untuk aplikasi Xamarin.iOS baru, Anda harus menggunakan HTTPS
secara eksklusif saat berkomunikasi dengan sumber daya internet. Selain itu, komunikasi API tingkat tinggi harus dienkripsi menggunakan TLS versi 1.2 dengan keseriusan penerusan.
Setiap koneksi yang dibuat dengan NSUrl Koneksi ion, CFUrl atau NSUrlSession akan menggunakan ATS secara default dalam aplikasi yang dibangun untuk iOS 9 dan OS X 10.11 (El Capitan).
Perilaku ATS default
Karena ATS diaktifkan secara default di aplikasi yang dibangun untuk iOS 9 dan OS X 10.11 (El Capitan), semua koneksi yang menggunakan NSUrl Koneksi ion, CFUrl, atau NSUrlSession akan tunduk pada persyaratan keamanan ATS. Jika koneksi Anda tidak memenuhi persyaratan ini, koneksi akan gagal dengan pengecualian.
Persyaratan Koneksi ATS
ATS akan memberlakukan persyaratan berikut untuk semua koneksi internet:
- Semua cipher koneksi harus menggunakan keamatan penerusan. Lihat daftar sandi yang diterima di bawah ini.
- Protokol Keamanan Lapisan Transportasi (TLS) harus versi 1.2 atau lebih tinggi.
- Setidaknya sidik jari SHA256 dengan kunci RSA 2048 bit atau lebih besar, atau kunci Kurva Elips (ECC) 256 bit atau lebih besar harus digunakan untuk semua sertifikat.
Sekali lagi, karena ATS diaktifkan secara default di iOS 9, setiap upaya untuk membuat koneksi yang tidak memenuhi persyaratan ini akan mengakibatkan pengecualian dilemparkan.
Sandi yang Kompatibel dengan ATS
Jenis sandi keaman lanjutan berikut diterima oleh komunikasi internet aman ATS:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Untuk informasi selengkapnya tentang bekerja dengan kelas komunikasi internet iOS, silakan lihat Referensi Kelas NSURL Koneksi ion Apple atau Referensi Kelas NSURLSession.
Mendukung ATS di Xamarin.iOS
Karena ATS diaktifkan secara default di iOS 9 dan OS X El Capitan, jika aplikasi Xamarin.iOS atau pustaka atau layanan apa pun yang digunakannya membuat koneksi ke internet, Anda harus mengambil beberapa tindakan atau koneksi Anda akan mengakibatkan pengecualian dilemparkan.
Untuk app yang ada, Apple menyarankan Anda untuk mendukung HTTPS
protokol sesegera mungkin. Jika Anda tidak dapat karena Anda terhubung ke layanan web pihak ke-3 yang tidak mendukung HTTPS
atau jika dukungan HTTPS
tidak praktis, Anda dapat menolak ATS. Lihat bagian Memilih Keluar dari ATS di bawah ini untuk detail selengkapnya.
Untuk aplikasi Xamarin.iOS baru, Anda harus menggunakan HTTPS
secara eksklusif saat berkomunikasi dengan sumber daya internet. Sekali lagi, mungkin ada situasi (seperti menggunakan layanan web pihak ke-3) di mana ini tidak dimungkinkan dan Anda harus menolak ATS.
Selain itu, ATS memberlakukan komunikasi API tingkat tinggi untuk dienkripsi menggunakan TLS versi 1.2 dengan ke rahasia maju. Lihat bagian Persyaratan Koneksi ion ATS dan Sandi yang Kompatibel dengan ATS di atas untuk detail selengkapnya.
Meskipun Anda mungkin tidak terbiasa dengan TLS (Keamanan Lapisan Transportasi) ini adalah penerus SSL (Secure Socket Layer) dan menyediakan kumpulan protokol kriptografi untuk memberlakukan keamanan melalui koneksi jaringan.
Tingkat TLS dikendalikan oleh layanan web yang Anda konsumsi dan oleh karena itu di luar kontrol aplikasi. HttpClient
Baik dan ModernHttpClient
harus secara otomatis menggunakan tingkat enkripsi TLS tertinggi yang didukung oleh server.
Tergantung pada server yang Anda ajukan (terutama jika itu adalah layanan pihak ke-3), Anda mungkin perlu menonaktifkan kerahasiaan penerusan atau memilih tingkat TLS yang lebih rendah. Lihat bagian Mengonfigurasi Opsi ATS di bawah ini untuk detail selengkapnya.
Penting
App Transport Security tidak berlaku untuk aplikasi Xamarin menggunakan implementasi HTTPClient Terkelola. Ini hanya berlaku untuk koneksi yang menggunakan implementasi HTTPClient CFNetwork atau implementasi HTTPClient NSURLSession.
Mengatur Implementasi HTTPClient
Untuk mengatur Implementasi HTTPClient yang digunakan oleh aplikasi iOS, klik dua kali Proyek di Penjelajah Solusi untuk membuka Opsi Proyek. Navigasi ke Build iOS dan pilih jenis klien yang diinginkan di bawah dropdown implementasi HttpClient:
Handler Terkelola
Handler Terkelola adalah handler HttpClient yang dikelola sepenuhnya yang telah dikirim dengan versi Xamarin.iOS sebelumnya dan merupakan handler default.
Pro:
- Ini adalah yang paling kompatibel dengan Microsoft .NET dan versi Xamarin yang lebih lama.
Kontra:
- Ini tidak sepenuhnya terintegrasi dengan iOS (misalnya terbatas pada TLS 1.0).
- Biasanya jauh lebih lambat daripada API asli.
- Ini membutuhkan kode yang lebih terkelola dan membuat aplikasi yang lebih besar.
CFNetwork Handler
Handler berbasis CFNetwork didasarkan pada kerangka kerja asli CFNetwork
.
Pro:
- Menggunakan API asli untuk performa yang lebih baik dan ukuran yang dapat dieksekusi yang lebih kecil.
- Menambahkan dukungan untuk standar yang lebih baru seperti TLS 1.2.
Kontra:
- Memerlukan iOS 6 atau yang lebih baru.
- Tidak tersedia watchOS.
- Beberapa fitur dan opsi HttpClient tidak tersedia.
NSUrlSession Handler
Handler berbasis NSUrlSession didasarkan pada API asli NSUrlSession
.
Pro:
- Menggunakan API asli untuk performa yang lebih baik dan ukuran yang dapat dieksekusi yang lebih kecil.
- Menambahkan dukungan untuk standar yang lebih baru seperti TLS 1.2.
Kontra:
- Memerlukan iOS 7 atau yang lebih baru.
- Beberapa fitur dan opsi HttpClient tidak tersedia.
Mendiagnosis Masalah ATS
Saat mencoba terhubung ke internet, baik secara langsung atau dari tampilan web di iOS 9, Anda mungkin mendapatkan kesalahan dalam formulir:
App Transport Security telah memblokir beban sumber daya HTTP (
http://www.-the-blocked-domain.com
) cleartext karena tidak aman. Pengecualian sementara dapat dikonfigurasi melalui file Info.plist aplikasi Anda.
Di iOS9, App Transport Security (ATS) memberlakukan koneksi aman antara sumber daya internet (seperti server back-end aplikasi) dan aplikasi Anda. Selain itu, ATS memerlukan komunikasi menggunakan HTTPS
protokol dan komunikasi API tingkat tinggi untuk dienkripsi menggunakan TLS versi 1.2 dengan keamatan maju.
Karena ATS diaktifkan secara default di aplikasi yang dibangun untuk iOS 9 dan OS X 10.11 (El Capitan), semua koneksi yang menggunakan NSURLConnection
, CFURL
atau NSURLSession
akan tunduk pada persyaratan keamanan ATS. Jika koneksi Anda tidak memenuhi persyaratan ini, koneksi akan gagal dengan pengecualian.
Apple juga menyediakan Aplikasi Sampel TLSTool yang dapat dikompilasi (atau ditranskodekan secara opsional ke Xamarin dan C#) dan digunakan untuk mendiagnosis masalah ATS/TLS. Silakan lihat bagian Memilih Keluar dari ATS di bawah ini untuk informasi tentang cara menyelesaikan masalah ini.
Mengonfigurasi Opsi ATS
Anda dapat mengonfigurasi beberapa fitur ATS dengan mengatur nilai untuk kunci tertentu dalam file Info.plist aplikasi Anda. Kunci berikut tersedia untuk mengontrol ATS (diindentasi untuk menunjukkan bagaimana kunci tersebut ditumpuk):
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSAllowsArbitraryLoadsInWebContent
NSExceptionDomains
<domain-name-for-exception-as-string>
NSExceptionMinimumTLSVersion
NSExceptionRequiresForwardSecrecy
NSExceptionAllowsInsecureHTTPLoads
NSRequiresCertificateTransparency
NSIncludesSubdomains
NSThirdPartyExceptionMinimumTLSVersion
NSThirdPartyExceptionRequiresForwardSecrecy
NSThirdPartyExceptionAllowsInsecureHTTPLoads
Setiap kunci memiliki jenis dan arti berikut:
- NSAppTransportSecurity (
Dictionary
) - Berisi semua kunci pengaturan dan nilai untuk ATS. - NSAllowsArbitraryLoads (
Boolean
) - JikaYES
ATS akan dinonaktifkan untuk domain apa pun yang tidak tercantum diNSExceptionDomains
. Untuk domain yang tercantum, pengaturan keamanan yang ditentukan akan digunakan. - NSAllowsArbitraryLoadsInWebContent (
Boolean
) - JikaYES
akan memungkinkan halaman web dimuat dengan benar sementara perlindungan Apple Transport Security (ATS) masih diaktifkan untuk sisa aplikasi. - NSExceptionDomains (
Dictionary
) - Kumpulan domain yang dan pengaturan keamanan yang harus digunakan ATS untuk domain tertentu. - <domain-name-for-exception-as-string> (
Dictionary
) - Kumpulan pengecualian untuk domain tertentu (misalnya.www.xamarin.com
). - NSExceptionMinimumTLSVersion (
String
) - Versi TLS minimal sebagaiTLSv1.0
,TLSv1.1
atauTLSv1.2
(yang merupakan default). - NSExceptionRequiresForwardSecrecy (
Boolean
) - JikaNO
domain tidak harus menggunakan cipher dengan keamanan penerusan. Nilai defaultnya adalahYES
. - NSExceptionAllowsInsecureHTTPLoads (
Boolean
) - JikaNO
(default) semua komunikasi dengan domain ini harus dalamHTTPS
protokol. - NSRequiresCertificateTransparency (
Boolean
) - JikaYES
Secure Sockets Layer (SSL) domain harus menyertakan data transparansi yang valid. Nilai defaultnya adalahNO
. - NSIncludesSubdomains (
Boolean
) - JikaYES
pengaturan ini menimpa semua subdomain domain ini. Nilai defaultnya adalahNO
. - NSThirdPartyExceptionMinimumTLSVersion (
String
) - Versi TLS yang digunakan saat domain adalah layanan pihak ke-3 di luar kontrol pengembang. - NSThirdPartyExceptionRequiresForwardSecrecy (
Boolean
) - JikaYES
domain pihak ke-3 memerlukan kerahasiaan ke depan. - NSThirdPartyExceptionAllowsInsecureHTTPLoads (
Boolean
) - JikaYES
ATS akan mengizinkan komunikasi yang tidak aman dengan domain pihak ke-3.
Memilih Keluar dari ATS
Meskipun Apple sangat menyarankan penggunaan HTTPS
protokol dan mengamankan komunikasi ke informasi berbasis internet, mungkin ada kalanya hal ini tidak selalu memungkinkan. Misalnya, jika Anda berkomunikasi dengan layanan web pihak ke-3 atau menggunakan iklan yang ditayangkan internet di aplikasi Anda.
Jika aplikasi Xamarin.iOS Anda harus membuat permintaan ke domain yang tidak aman, perubahan berikut pada file Info.plist aplikasi Anda akan menonaktifkan default keamanan yang diterapkan ATS untuk domain tertentu:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.the-domain-name.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Di dalam Visual Studio untuk Mac, klik Info.plist
dua kali file di Penjelajah Solusi, beralihlah ke tampilan Sumber dan tambahkan tombol di atas:
Jika aplikasi Anda perlu memuat dan menampilkan konten web dari situs yang tidak aman, tambahkan yang berikut ini ke file Info.plist aplikasi Anda untuk memungkinkan halaman web dimuat dengan benar saat perlindungan Apple Transport Security (ATS) masih diaktifkan untuk aplikasi lainnya:
<key>NSAppTransportSecurity</key>
<dict>
<key> NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
Secara opsional, Anda dapat membuat perubahan berikut pada file Info.plist aplikasi Anda untuk sepenuhnya menonaktifkan ATS untuk semua domain dan komunikasi internet:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Di dalam Visual Studio untuk Mac, klik Info.plist
dua kali file di Penjelajah Solusi, beralihlah ke tampilan Sumber dan tambahkan tombol di atas:
Penting
Jika aplikasi Anda memerlukan koneksi ke situs web yang tidak aman, Anda harus selalu memasukkan domain sebagai pengecualian menggunakan NSExceptionDomains
alih-alih menonaktifkan ATS sepenuhnya menggunakan NSAllowsArbitraryLoads
. NSAllowsArbitraryLoads
hanya boleh digunakan dalam situasi darurat ekstrem.
Sekali lagi, menonaktifkan ATS hanya boleh digunakan sebagai upaya terakhir, jika beralih ke koneksi aman tidak tersedia atau tidak praktis.
Ringkasan
Artikel ini telah memperkenalkan App Transport Security (ATS) dan menjelaskan caranya memberlakukan komunikasi yang aman dengan internet. Pertama, kami membahas perubahan yang diperlukan ATS untuk aplikasi Xamarin.iOS yang berjalan di iOS 9. Kemudian kami membahas pengontrolan fitur dan opsi ATS. Akhirnya, kami membahas memilih keluar dari ATS di aplikasi Xamarin.iOS Anda.