Sorun: iOS 9 artık ATS kullandığından, mobil uygulamamız artık web servisimizle güvenli bir bağlantı kuramıyor.
Arka plan: iOS 9, Uygulama Aktarım Güvenliği'ni sunar
Sunucu Kurulumu: Windows Server 2008 R2 SP1 (VM) IIS 7.5, digicert'ten SSL sertifikaları. Windows güvenlik duvarı kapalı.
Anahtar RSA 2048 bit (e 65537)
Sertifikayı Veren DigiCert SHA2 Güvenli Sunucu CA
RSA ile imza algoritması SHA512
Bunlar, Uygulama Aktarımı Güvenliği gereksinimleridir:
Sunucunun en azından Aktarım Katmanı Güvenliği (TLS) protokolü 1.2 sürümünü desteklemesi gerekir. Bağlantı şifreleri, ileri gizlilik sağlayanlarla sınırlıdır (aşağıdaki şifreleme listesine bakın.) Sertifikalar, 2048 bit veya daha büyük bir RSA anahtarı veya 256 bit veya daha büyük Eliptik Eğri ile SHA256 veya daha iyi bir imza karma algoritması kullanılarak imzalanmalıdır. (ECC) tuşuna basın. Geçersiz sertifikalar sabit bir arızaya neden olur ve bağlantı olmaz. Bunlar kabul edilen şifrelerdir:
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
Ne denendi:
- Etki alanımızın çalışmasına izin vermek için mobil uygulamaya istisnalar ekliyor, ancak bu güvenli olmayan yöntemle gitmek istemiyorum, SSL'imizi düzeltmek istiyorum.
- Kullanılan IIS Kripto 'en iyi uygulama', denenmiş 'pci' ve bazı özel ayarlar kullanmak. Hatta kripto paketini sadece yukarıdaki listeye değiştirmeyi ve yeniden sıralamayı denedi. Her denemeden sonra sunucu yeniden başlatılır ve SSL Labs çalıştırılır (önbellek temizlendikten sonra). F derecelendirmesinden A'ya ve hatta A-'ya geçmeyi başardım, ancak bu sadece iOS 8 ve 9'un güvenli bağlantılar kuramamalarına neden oldu. (NSURLErrorDomain Kodu = -1200 ve _kCFStreamErrorCodeKey = -9806)
- VM'yi geri yükledi ve bir powershell betiği denedi SSL'nizi SSL için Mükemmel İletme Gizliliği ve TLS 1.2 Kurun Hatta, güç komut dosyasından gerekli olanları en az bir listeye siberleri düzenlediğim ikinci bir girişimde bulundum.
Sonuçlar: Her zaman benzer, A veya A- dereceleri. iOS8 ve iOS9 güvenli bağlantı üzerinde anlaşamaz. El Sıkışma Simülasyonu, Safari ve iOS ürünleri için "Protokol veya şifre takımı uyuşmazlığı" ile sonuçlanır.
GÜNCELLEME Apple desteği ile çalıştıktan sonra bazı paket izleme yakalamaları yaptık:
$ 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
İlk üç paket, TCP bağlantısını kuran klasik SYN - SYN-ACK - ACK üç yollu el sıkışmasıdır. Dördüncü paket iOS'a sunucunuza bir TLS İstemcisi Merhaba mesajı gönderir, bu TCP bağlantısı üzerinden bir TLS bağlantısı kurmanın ilk adımıdır. Bu mesajı ayırdım ve yeterince makul görünüyor. Beşinci pakette sunucu sadece bağlantıyı keser (bir RST göndererek).
IIS 7.5'in neden bir RST yapacağını bilen var mı?