ATS未対応の対応策は?ATS回避方法について解説
ATS(App Transport Security)は、近年、叫ばれているWebにおける通信の常時SSL/TLS化に対応したものだと言えます。
GoogleもSSL対応したWebサイトを優先的にインデックス化することを表明していますし、アプリ開発者にとっても今後SSL/TSL化は避けて通れない状況となっています。
しかし、アプリからWebへの通信がすべてATS必須になった場合、不都合が発生することも十分考えられます。
近い将来、すべての通信がSSL/TLS化するとしても、今現在対応していない通信について、ATSが必須化された場合にどのような対応が可能なのか考えてみます。
ATS対応が難しいものにはどんなものがある?
アプリの接続先が自社のサーバまたは、自前で準備しているサーバについては、ATSの対応を行っていく必要があるでしょう。
このことについては、ATSだからというわけではなく、Webのセキュア化の流れにも合致しているので、大きな問題はないはずです。
問題は、外部のWebサービスを利用する場合とアプリ内部でWebViewを使って不特定多数のWebを閲覧する場合などでしょう。
iOS9からiOS10でのATSの設定の強化とは?
iOS9では、例えばアプリの中で不特定のWebサイトを利用する場合には、ATSをすべてOFFにする必要がありました。
iOS9では「NSAllowsArbitraryLoads」がYESの場合には、NSURLSession、UIWebView、WKWebViewのすべてについて、http通信が許可されます。(つまりATSがOFFになっている)
それに対してiOS10の場合には、「NSAllowsArbitraryLoadsInWebContent」をYESに設定すると、「NSAllowsArbitraryLoads」がYESでも設定が無視され、WKWebViewのみhttp通信が可能となり、NSURLSession、UIWebViewではATSが有効のままとなります。
UIWebViewを利用しているアプリは、WKWebViewに変更する必要があるかもしれません。
その他、「NSAllowsArbitraryLoadsInMedia」(AVFoundationからのメディアのダウンロード)、「NSAllowsLocalNetworking」(ローカルネットワーキングでのhttpの利用)などが追加されています。
利用するのに正当な理由が必要なキー
次のキーを利用するためには、Appleに正当な理由を示す必要があるとされています。
Appleによる審査を通過することができればアプリが承認されるということになります。
・NSAllowsArbitraryLoads
ATSの無効化キー。iOS10以降で、「NSAllowsArbitraryLoadsInMedia」「NSAllowsArbitraryLoadsInWebContent」「NSAllowsLocalNetworking」が指定されている場合無視されます。しかし、iOS9対応でhttp通信を許可するためには、このキーをYESに設定する必要があります。
・NSExceptionAllowsInsecureHTTPLoads
このキーをYESにすると、http通信や、自己証明書の許可、有効期限が切れた証明書、証明書のコモンネームと異なるドメインへの接続などが許可されます。(ただし、TLSの制限は変更されません)
・NSExceptionMinimumTLSVersion
TLSのバージョンを指定して、TLS1.2より低いレベルの接続を許可化する設定です。
安易にATSをOFFにするべきではない
ATSへの対応に対しては、安易にすべての通信についてATSを無効にすることはおすすめしません。
ATSへの対応を行いつつ、ATSを無効にする範囲をできるだけ少なくし、状況に応じてATS対応を進めていく必要があるでしょう。
株式会社キャパでは、アプリの企画・開発についてご相談を承っています。
アプリを作りたいので、具体的な提案が欲しい。頭の中にあるアイデアを本当に実現できるのか知りたい。予算内に収まるのか?
などのお客様のご相談に、親身に応じます。
アプリ開発:実績のご紹介