Masalah: Aplikasi seluler kami tidak lagi dapat membuat koneksi yang aman ke layanan web kami karena iOS 9 sekarang menggunakan ATS.
Latar Belakang: iOS 9 memperkenalkan Keamanan Transportasi Aplikasi
Pengaturan Server: Windows Server 2008 R2 SP1 (VM) IIS 7.5, sertifikat SSL dari digicert. Firewall Windows mati.
Kunci RSA 2048 bit (e 65537)
Penerbit DigiCert SHA2 Secure Server CA
Algoritma tanda tangan SHA512denganRSA
Ini adalah persyaratan Keamanan Transportasi Aplikasi:
Server harus mendukung setidaknya protokol Transport Layer Security (TLS) versi 1.2. Cipher koneksi terbatas pada yang memberikan kerahasiaan ke depan (lihat daftar cipher di bawah ini.) Sertifikat harus ditandatangani menggunakan SHA256 atau algoritma hash tanda tangan yang lebih baik, dengan kunci RSA 2048 bit atau lebih besar atau 256 bit atau lebih besar Elliptic-Curve (ECC). Sertifikat yang tidak valid mengakibatkan kegagalan yang berat dan tidak ada koneksi. Ini adalah sandi yang diterima:
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
Apa yang sudah dicoba:
- Menambahkan pengecualian di aplikasi seluler agar domain kami berfungsi, tetapi saya tidak ingin menggunakan metode yang tidak aman ini, saya ingin memperbaiki SSL kami.
- Digunakan IIS Crypto untuk menggunakan 'praktik terbaik', mencoba 'pci', dan pengaturan khusus. Bahkan mencoba memodifikasi suite crypto ke daftar di atas, dan memesan ulang. Setelah setiap upaya, server di-boot ulang, dan dan Lab SSL dijalankan (setelah membersihkan cache). Saya berhasil beralih dari peringkat F ke A, dan bahkan A-, tetapi ini hanya mengakibatkan iOS 8 dan 9 tidak dapat membuat koneksi yang aman. (NSURLErrorDomain Code = -1200 dan _kCFStreamErrorCodeKey = -9806)
- Memulihkan VM dan mencoba skrip PowerShell. Mengatur IIS Anda untuk SSL Perfect Forward Secrecy dan TLS 1.2. Saya bahkan melakukan upaya kedua di mana saya mengedit cipher dari skrip daya ke daftar minimal apa yang diperlukan.
Hasil: Selalu serupa, peringkat A atau A-. iOS8 dan iOS9 tidak dapat menegosiasikan koneksi aman. Simulasi Jabat Tangan menghasilkan "Protokol atau ketidaksesuaian paket sandi" untuk produk Safari dan iOS.
PEMBARUAN Setelah bekerja dengan dukungan Apple, kami melakukan beberapa penangkapan jejak paket:
$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0
Tiga paket pertama adalah SYH - SYN-ACK klasik - ACK handshake tiga arah yang mengatur koneksi TCP. Paket keempat adalah iOS mengirimkan server Anda pesan Halo Klien TLS, langkah pertama dalam menyiapkan koneksi TLS melalui koneksi TCP. Saya telah memisahkan pesan ini dan itu terlihat cukup masuk akal. Dalam paket kelima server cukup menjatuhkan koneksi (dengan mengirim RST).
Adakah yang tahu mengapa IIS 7.5 akan melakukan RST?