【iOS9】HTTP→HTTPSだと!App Transport Security(ATS)について

シェアする


iOS9では、WebViewなどで、HTTPへのアクセスができなくなっています。ネットで検索してみると、

【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法

まじですか、要検証↓

HTTPでのリクエストは使えなくしていく気満々な模様。

シンプルなアプリでテストしてみたところ、

01

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.

とエラーが出て、どうも本当のようです。

仮にGoogleへhttpsで接続して、その検索結果からサイトへアクセスしようとしても、そのサイトがHTTPだった場合は、同様のエラーでアクセスできません。

02

推奨されていないということですが、App Transport Security(ATS) の機能全体をオフにすることで、アクセスできるようにはなるようです。Info.plistに「NSAppTransportSecurity」をDictionaryで作成し、「NSAllowsArbitraryLoads」をBoolean型としてtrue(YES)にします。Xcode 6の既存のプロジェクトをXcode 7にしてこのようなエラーが発生した場合は、とりあえずこの方法で対処すると動くようになるかもしれません。

03

ブラウザ機能を内部に持つようなアプリの場合は、現状としてはアクセスできなくなるサイトも多くあり、このような設定にするしかないのではないでしょうか?

また、Info.plistの「NSAppTransportSecurity」>「NSExceptionDomains(Dictionary型)」でドメインを登録し、「NSTemporaryExceptionAllowsInsecureHTTPLoads」をtrue(YES)にしておくことで、HTTPであってもアクセスできるサイトを設定することも可能です。

04

特定のドメインしかアクセスしないことが確定しているケースでは、むしろこの方がよさそうですね。(しかしながら、WebViewなどを使ってページを表示した場合、ページ内に外部リンクがある場合は同様にアクセスできないため、表示されなかったり機能しないものが出てくる可能性もありますね。)

いずれにしても、結構大きな仕様変更なため、このエラーが発生するケースは多そうです。

[追記]:サブドメインを登録したい場合は、登録したドメイン以下に「NSIncludesSubdomains」をBoolean型で作り、true(YES)にしておきます。

05

[追記] : クラスメソッドさんの記事に全部細かく書いてありますね。全部知りたい方はご参考に。
[iOS 9] iOS 9 で追加された App Transport Security の概要」 

シェアする

フォローする

コメントを残す

%d人のブロガーが「いいね」をつけました。