Yanıtlar:
İOS9 için Apple, App Transport Security'nin (ATS) bir parçası olarak iOS uygulamalarından tüm güvenli olmayan HTTP trafiğini devre dışı bırakarak iOS 9 ile radikal bir karar verdi .
ATS'yi basitçe devre dışı bırakmak için Info.plist'i açarak bu adımları takip edebilir ve aşağıdaki satırları ekleyebilirsiniz:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Rasgele yüklemelere ( NSAllowsArbitraryLoads = true
) izin vermek iyi bir çözüm olsa da , ATS'yi tamamen devre dışı bırakmamalı, bunun yerine izin vermek istediğiniz HTTP bağlantısını etkinleştirmelisiniz:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
iOS 9, son güvenlik açıklarından kaçınmak için HTTPS kullanan bağlantıları TLS 1.2 olmaya zorlar. İOS 8'de şifrelenmemiş HTTP bağlantıları bile destekleniyordu, böylece TLS'nin eski sürümleri de herhangi bir sorun çıkarmadı. Geçici bir çözüm olarak, bu kod parçacığını Info.plist'inize ekleyebilirsiniz:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
* App Transport Security'ye (ATS) başvurulur
Yalnızca belirli alanları hedefliyorsanız, bunu deneyebilir ve uygulamanızın Info.plist'e ekleyebilirsiniz:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Görünüşe göre iOS 9.0.2, geçerli HTTPS uç noktalarına yönelik istekleri kesiyor. Şimdiki şüphem, SHA-256 sertifikaları gerektirmesi veya bu hatayla başarısız olması.
Yeniden üretmek için UIWebView'unuzu safari ile inceleyin ve rastgele bir HTTPS uç noktasına gitmeyi deneyin:
location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)
Şimdi google'a gitmeyi deneyin (tabii ki SHA-256 sertifikalarına sahipler):
location.href = "https://google.com"
// no problemo
Taşıma güvenliğine bir istisna eklemek (@ stéphane-bruckert'in yukarıdaki cevabında belirtildiği gibi) bunu düzeltmeye yarar. Ayrıca tamamen devre dışı bırakmanın NSAppTransportSecurity
da işe yarayacağını varsayıyorum , ancak tamamen devre dışı bırakmanın uygulama incelemenizi tehlikeye atabileceğini okudum.
[DÜZENLE] Bağlandığım etki alanlarını NSExceptionDomains
diktede sıralamanın, NSExceptionAllowsInsecureHTTPLoads
true olarak ayarlıyken bile bu sorunu çözdüğünü buldum . : \
Sorun, sunucu tarafındaki SSL sertifikasıdır. Ya bir şey karışıyor ya da sertifika hizmetle eşleşmiyor. Örneğin, bir sitenin www.mydomain.com için bir SSL sertifikası varken kullandığınız hizmet myservice.mydomain.com üzerinde çalışıyorsa. Bu farklı bir makinedir.
HTTPS URL'mi şu şekilde belirttiğimde aynı hatayı alıyorum: https://www.mywebsite.com . Ancak, üç W olmadan şunu belirttiğimde iyi çalışıyor: https://mywebsite.com .
Xcode projesi -> info.plist'e gidin ve + Düğmesine tıklayın, ardından Ekle (Uygulama Taşıma Güvenlik Ayarları) Genişletin, Rasgele Yüklere İzin Ver, YES Ayarlayın. Teşekkürler
Sorunum NSURLConnection
ve bu iOS9'da kullanımdan kaldırıldı, bu yüzden tüm API'yi olarak değiştirdim NSURLSession
ve bu sorunumu çözdü.
Benim durumumda simülatörümde bu sorunla karşılaştım çünkü bilgisayarımın tarihi güncel tarihin gerisindeydi. Bu nedenle, SSL hatasıyla karşılaştığınızda bu durumu da kontrol edin.
Oynatma sırasında aşağıdaki hata mesajı alıyordum
finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://remote-abcabc-svc.an.abc.com:1935/abr/_definst_/smil:v2/video/492F2F82592F59EA74ABAA6B9D6E6F42/F6B1BD452132329FBACD32730862CAE0/091EAD80FE9BEDD52A2F33840CA3CBAC.v3.eng.smil/playlist.m3u8, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>
Plist dosyasındaki istisna etki alanlarına girdi eklediğimden ve NSAllowsArbitraryLoads'in true olarak ayarlandığından ve hala bir hata görmeye başladığımdan emin oldum.
Sonra http ile değil, https ile URL oynadığımı fark ettim.
Video url'sini http olarak ayarladım ve sorun çözüldü.