Solusi untuk Error “failed (kCFStreamErrorDomainSSL, -9813)”
Gambaran Umum Error
Error “failed (kCFStreamErrorDomainSSL, -9813)” sering terjadi pada aplikasi iOS saat mencoba membuat koneksi HTTPS yang aman. Kesalahan ini umumnya terkait dengan kebijakan keamanan yang diatur oleh Apple yang dikenal sebagai App Transport Security (ATS). ATS dirancang untuk memastikan bahwa aplikasi hanya melakukan koneksi ke server yang menggunakan protokol yang aman dan terenkripsi. Jika server tidak memenuhi kriteria ATS, maka akan muncul error ini.
Penyebab Umum
Beberapa penyebab umum dari error ini meliputi:
- Versi TLS yang tidak didukung: iOS 9 dan versi lebih baru membutuhkan TLS versi 1.2 untuk semua koneksi yang aman. Server yang hanya mendukung versi TLS yang lebih rendah (seperti TLS 1.0) tidak akan dapat terhubung.
- Kebijakan App Transport Security: Jika aplikasi tidak mengonfigurasi Info.plist dengan benar untuk mengizinkan pengecualian untuk domain tertentu, maka aplikasi tidak akan dapat melakukan koneksi.
- Sertifikat SSL yang tidak valid atau tidak dipercaya: Jika sertifikat SSL yang digunakan oleh server tidak valid atau tidak dikeluarkan oleh otoritas sertifikat yang terpercaya, koneksi akan gagal.
- Pengaturan yang tidak memadai di Info.plist: Ketiadaan pengaturan yang benar di file Info.plist aplikasi dapat menyebabkan kegagalan koneksi.
Metode Solusi
Metode 1: Mengonfigurasi Info.plist untuk Pengecualian Domain
Langkah pertama untuk mengatasi error ini adalah dengan menambahkan pengaturan yang tepat di file Info.plist aplikasi Anda. Berikut adalah langkah-langkahnya:
- Buka file Info.plist di proyek Xcode Anda.
- Tambahkan kunci
NSAppTransportSecuritydengan tipe dictionary. - Di dalam
NSAppTransportSecurity, tambahkan kunciNSExceptionDomainsdengan tipe dictionary. - Di dalam
NSExceptionDomains, tambahkan domain server Anda (misalnyayourserver.com) dengan tipe dictionary. - Di dalam domain yang baru ditambahkan, tambahkan kunci berikut dengan nilai yang sesuai:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
Metode 2: Mengizinkan Muatan Arbitrary (Sementara)
Jika Anda tidak dapat memperbarui server untuk mendukung TLS 1.2, Anda bisa mengizinkan muatan arbitrary. Namun, metode ini sebaiknya digunakan sementara karena dapat mengurangi keamanan aplikasi Anda:
- Tambahkan pengaturan berikut di Info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Metode 3: Menentukan Versi TLS Minimal
Jika server Anda hanya mendukung TLS 1.0, Anda dapat mengonfigurasi Info.plist untuk mengizinkan versi tersebut dengan cara berikut:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
</dict>
</dict>
Metode 4: Menggunakan NSURLConnection atau NSURLSession
Pastikan Anda menggunakan NSURLSession atau NSURLConnection dengan pengaturan yang benar. Anda dapat memeriksa kesalahan koneksi dengan menggunakan alat diagnostik:
nscurl --ats-diagnostics https://yourserver.com
Metode 5: Memastikan Forward Secrecy
Pastikan server Anda mendukung forward secrecy. Jika tidak, Anda mungkin perlu menonaktifkan pengaturan ini dalam aplikasi Anda:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
Tips Pencegahan
- Perbarui server Anda: Pastikan server Anda mendukung TLS 1.2 atau lebih tinggi.
- Gunakan sertifikat SSL yang valid: Pastikan semua sertifikat SSL dikeluarkan oleh otoritas yang terpercaya.
- Uji aplikasi secara menyeluruh: Sebelum merilis aplikasi, lakukan pengujian untuk memastikan semua koneksi aman dan tidak ada error terkait SSL.
Ringkasan
Error “failed (kCFStreamErrorDomainSSL, -9813)” biasanya disebabkan oleh kebijakan keamanan yang ketat di iOS terkait koneksi HTTPS. Dengan mengikuti langkah-langkah di atas untuk mengonfigurasi Info.plist, Anda dapat mengatasi masalah ini. Pastikan untuk selalu menjaga keamanan aplikasi Anda dengan menggunakan protokol terkini dan sertifikat yang valid. Jika Anda terus mengalami masalah, pertimbangkan untuk mengupdate server Anda agar sesuai dengan standar keamanan terbaru.

コメント