Adakah yang memiliki iOS 9 beta 1 yang mengalami masalah ini?
Saya menggunakan NSURLConnection standar untuk terhubung ke layanan web dan segera setelah panggilan ke layanan web saya mendapatkan kesalahan di bawah ini. Ini sedang bekerja di iOS 8.3
Kemungkinan bug beta? ide atau pemikiran apa pun akan luar biasa! Saya tahu ini sangat awal dalam pengembangan iOS 9
Inilah kesalahan lengkapnya:
CFNetwork SSLHandshake gagal (-9824) NSURLSession / NSURLConnection HTTP load gagal (kCFStreamErrorDomainSSL, -9824)
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
sumber
Di iOS 10+, string TLS HARUS dari bentuk "TLSv1.0". Tidak mungkin hanya "1.0". (Mendesah)
Kombinasi berikut dari Jawaban lainnya berfungsi.
Katakanlah Anda mencoba terhubung ke host (YOUR_HOST.COM) yang hanya memiliki TLS 1.0.
Tambahkan ini ke Info.plist aplikasi Anda
sumber
NSTemporaryExceptionRequiresForwardSecrecy
melakukan trik untuk saya, terima kasih!Untuk info lebih lanjut Mengkonfigurasi Pengecualian Keamanan Transport Aplikasi di iOS 9 dan OSX 10.11
Ini Pengiriman Aplikasi dengan Keamanan Transportasi Aplikasi mencakup beberapa tips debugging yang baik
Kegagalan ATS
CFNETWORK_DIAGNOSTICS
nscurl
sumber
Jika backend Anda menggunakan semut koneksi aman Anda bisa menggunakan NSURLSession
Anda perlu memeriksa konfigurasi server Anda terutama untuk mendapatkan versi ATS dan Info sertifikat SSL:
Alih-alih hanya Mengizinkan Koneksi Tidak Aman dengan menetapkan
NSExceptionAllowsInsecureHTTPLoads = YES
, alih-alih Anda perlu Izinkan Keamanan yang Rendah jika server Anda tidak memenuhi persyaratan minimum (v1.2) untuk ATS (atau lebih baik untuk memperbaiki sisi server).Mengizinkan Keamanan yang Rendah ke Server Tunggal
gunakan klien openssl untuk menyelidiki sertifikat dan dapatkan konfigurasi server Anda menggunakan klien openssl:
..cari pada akhirnya
App Transport Security (ATS) memerlukan protokol Transport Layer Security (TLS) versi 1.2.
Persyaratan untuk Menghubungkan Menggunakan ATS:
Pembaruan: ternyata openssl hanya menyediakan versi protokol minimal Protokol: tautan TLSv1
sumber
Setelah dua hari upaya dan kegagalan, yang berhasil bagi saya adalah kode womble ini
dengan One change, menurut posting ini kita harus berhenti menggunakan sub-kunci yang terkait dengan kamus NSExceptionDomains dari jenis Konvensi
Dan gunakan di Konvensi baru
sebagai gantinya.
dokumentasi apel
kode saya
sumber
Alat lain yang bermanfaat adalah nmap (brew install nmap)
Memberikan hasil
sumber
Kesalahan ini muncul di log kadang-kadang ketika saya menggunakan versi iOS Cordova buggy / crashy. Itu hilang ketika saya memutakhirkan atau menurunkan iOS Cordova.
Server tempat saya terhubung menggunakan TLSv1.2 SSL, jadi saya tahu itu bukan masalahnya.
sumber
Dalam
.plist
file proyek Anda, tambahkan izin ini:sumber
Sintaks untuk konfigurasi Info.plist
sumber
Jawaban Diperbarui (pasca-WWDC 2016):
App Transport Security, atau ATS, adalah fitur yang diperkenalkan Apple di iOS 9. Ketika ATS diaktifkan, itu memaksa aplikasi untuk terhubung ke layanan web melalui koneksi HTTPS daripada HTTP yang tidak aman.
Namun, pengembang masih dapat mematikan ATS dan mengizinkan aplikasi mereka untuk mengirim data melalui koneksi HTTP seperti yang disebutkan dalam jawaban di atas. Pada akhir 2016, Apple akan membuat ATS wajib untuk semua pengembang yang berharap untuk mengirimkan aplikasi mereka ke App Store. tautan
sumber
Perangkat yang saya uji memiliki pengaturan waktu yang salah. Jadi ketika saya mencoba mengakses halaman dengan sertifikat yang akan segera habis itu akan menolak akses karena perangkat meskipun sertifikat telah kedaluwarsa. Untuk memperbaikinya, atur waktu yang tepat pada perangkat!
sumber