回答:
iOS9の場合、アップルはiOS 9で根本的な決定を行い、App Transport Security(ATS)の一環として、iOSアプリからのすべての非セキュアHTTPトラフィックを無効にしました。
ATSを無効にするには、Info.plistを開いて次の行を追加します。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
任意のロード(NSAllowsArbitraryLoads = true
)を許可することは良い回避策ですが、ATSを完全に無効にするのではなく、許可するHTTP接続を有効にする必要があります。
<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では、最近の脆弱性を回避するために、HTTPSを使用している接続を強制的にTLS 1.2にしています。iOS 8では、暗号化されていないHTTP接続もサポートされていたため、古いバージョンのTLSでも問題は発生しませんでした。回避策として、このコードスニペットをInfo.plistに追加できます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
特定のドメインをターゲットにしている場合は、これをアプリケーションのInfo.plistに追加してみてください。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
iOS 9.0.2は有効なHTTPSエンドポイントへのリクエストを中断するようです。私の現在の疑いは、SHA-256証明書が必要であるか、このエラーで失敗することです。
再現するには、サファリを使用してUIWebViewを検査し、任意のHTTPSエンドポイントに移動してみます。
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)
今度はグーグルに行ってみてください(もちろん、彼らはSHA-256証明書を持っているからです):
location.href = "https://google.com"
// no problemo
トランスポートセキュリティに例外を追加すると(上記の@stéphane-bruckertの回答で概説されています)、これを修正できます。完全に無効にすることも機能するとNSAppTransportSecurity
思いますが、完全に無効にすることはアプリのレビューを危険にさらす可能性があることを読んだことがあります。
[編集]私が接続しているドメインをNSExceptionDomains
dictで列挙するだけで、このNSExceptionAllowsInsecureHTTPLoads
設定をtrueのままにしてもこの問題が解決することがわかりました。:\
問題はサーバー側のssl証明書です。何かが干渉しているか、証明書がサービスと一致していません。たとえば、サイトにwww.mydomain.comのssl証明書があり、使用するサービスがmyservice.mydomain.comで実行されている場合です。それは別のマシンです。
HTTPS URLをhttps://www.mywebsite.comと指定すると、同じエラーが発生します。ただし、3つのWなしで指定した場合は正常に機能します:https : //mywebsite.com。
Xcodeプロジェクト-> goto info.plistをクリックし、[+]ボタンをクリックして、[追加(App Transport Security Settings)]、[許可]、[任意のロードを許可]の順に設定します。ありがとう
私の問題はNSURLConnection
iOS9では廃止されたため、すべてのAPIをに変更しNSURLSession
、問題を修正しました。
私の場合、コンピューターの日付が現在の日付より遅れているため、シミュレーターでこの問題に直面しました。SSLエラーが発生した場合は、このケースも確認してください。
再生時にエラーが発生しました
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ファイルの例外ドメインにエントリを追加し、NSAllowsArbitraryLoadsがtrueに設定されていることを確認しましたが、それでもエラーが発生していました。
次に、httpではなくhttpsでURLを再生していることに気付きました。
ビデオのURLをhttpに設定して問題を解決しました。