apple ios9 (ats)への対応
TRANSCRIPT
1
Apple iOS9(ATS)への対応
株式会社Jストリーム
配信事業統括本部 事業推進部
マネージャー 佐藤 太一
© 2015 J-Stream Inc. All Rights Reserved.
Apple iOS9(ATS)への対応
▶アジェンダ▶ATS(=App Transport Security)とは▶サーバー側での対応▶アプリケーション側での対応▶参考:IPv6 only networkへの対応(DNS64+NAT64)
© 2015 J-Stream Inc. All Rights Reserved. 2
ATS(=App Transport Security)とは
▶Apple iOS9以降、Mac OS X v10.11以降で適用される、アプリケーション内の通信をセキュアにするためにAppleが導入した仕組み
▶現時点での最適に近いセキュアな接続をデフォルトとして動作させる
▶ATS対応が出来ていないと、Appleのアプリケーション審査を今後通過する事が出来なくなる可能性がある
▶公式Webサイト▶App Transport Security Technote
▶https://developer.apple.com/library/prerelease/mac/technotes/App-Transport-Security-Technote/index.html
© 2015 J-Stream Inc. All Rights Reserved. 3
サーバー側での対応①まとめ-1
▶外部の接続先(アプリ内からの通信先)に以下の要件が要求される1. HTTPs(TLS version1.2)以上
2. 指定の暗号化スイート(CipherSuite)を利用
3. サーバー証明書の暗号化強度▶SHA256以上のフィンガープリント
▶2048ビット以上のRSAキー、もしくは256ビット以上のElliptic-Curve(ECC)キー
4. 無効な証明書を指定した場合は接続不可
▶チェック用Webサイト▶https://www.ssllabs.com/ssltest/
▶“Do not show the results on the boards”にチェックを入れましょう!
© 2015 J-Stream Inc. All Rights Reserved. 4
サーバー側での対応②まとめ-2
© 2015 J-Stream Inc. All Rights Reserved. 5
パラメータ 必要性
デフォルト カスタマイズ デフォルト カスタマイズ
SSL証明書
署名 SHA256以上 不可 ー ー
公開鍵の鍵長RSA2048以上、EC256以上
不可 ー ー
プロトコル
SSLバージョン TLS 1.2 可能 ー ー
Forward Secrecy(鍵交換アルゴリズム)
ECDHE 不可 必要 可能
サーバー側での対応③1.HTTPs(TLS version1.2)以上
▶HTTPs(TLS version1.2)以上▶SSL3.0の脆弱性(POODLE:2014/10)によりサーバー側、クライアント側共
にSSL3.0以下は塞がれている事が最近は多い▶特にフィーチャーフォン対応で一部SSL3.0を残しているWebサイトはあるが、
多くのWebサイトは既に対応済
▶Internet Explorer 11は2015/4/14にSSL3.0を既定で無効化
▶Windows Update経由で自動的に変更されている
▶TLS version1.2をサーバー側でサポートするにはそれなりに新しいサーバーソフトウェアを利用する必要あり
▶Apache 2.2以降(+openssl1.0.1以降)
▶RHEL/CentOS標準提供のソフトウェアを利用の場合は6以降
▶Nginx1.1.13以降(+openssl1.0.1以降)
▶IIS 7.5以降
▶Win2008R2/Win7以降
© 2015 J-Stream Inc. All Rights Reserved. 6
サーバー側での対応④2.指定の暗号化スイート(CipherSuite)を利用
▶指定の暗号化スイート(CipherSuite)▶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
▶forward secrecy(前方秘匿性)対応が必要▶SSL証明書の秘密鍵が漏洩しても、過去の通信に対する解読を不可能とすること▶ECDHEを満たせば自動的に条件が満たされる
▶上記もある程度新しいソフトウェアでないと対応不可▶openssl側では対応出来ていたがWebサーバーソフトウェア側で対応出来ていないといった事も有るので注意
▶将来的に変更される可能性あり▶2015/08の対応中にtechnoteが変更されて色々大変でした
© 2015 J-Stream Inc. All Rights Reserved. 7
サーバー側での対応⑤3.サーバー証明書の暗号化強度
▶サーバー証明書の暗号化強度▶SHA256以上のフィンガープリント
▶2048ビット以上のRSAキー、もしくは256ビット以上のElliptic-Curve(ECC)キー
▶それぞれ業界主導でかなり進んでいるため、それ程大きな問題ではない
▶SHA-1、1024ビットRSAキーのSSL証明書は既に多くのSSL事業者で発行停止の状況
© 2015 J-Stream Inc. All Rights Reserved. 8
サーバー側での対応⑥4.無効な証明書を指定した場合は接続不可
▶自己署名証明書(オレオレ証明書)の利用不可▶SSL事業者から入手しましょう
© 2015 J-Stream Inc. All Rights Reserved. 9
アプリケーション側での対応①まとめ
▶基本的にはサーバー側での対応を行うのが良▶将来的にサーバー側対応が出来ていないとAppleの審査でNGになる可能性が高い
▶ATSがデフォルトで有効になる条件▶アプリをiOS9用にビルドした場合(Xcode7)▶iOS8以前向けにビルドした場合、ATSの強制適用は行われない
▶ATS有効化の影響範囲▶概要
▶アプリからの通信において、HTTPアクセスがエラーとなる▶対象となるAPI
▶NSURLConnection, CFURL, NSURLSession▶関連クラス
▶WebView
▶回避方法が用意されている(Info.plist)▶アプリ内全部のATSを無効にする(Apple非推奨)▶利用するドメイン限定でATSを無効にする▶暗号化通信の制限を緩和する▶SFSafariViewControllerを利用する
© 2015 J-Stream Inc. All Rights Reserved. 10
アプリケーション側での対応②ATS有効化の影響範囲 詳細
▶NSURLConnection, CFURL, NSURLSession▶iOS 9.0 以降と OS X 10.11 以降向けにビルドされたアプリでは、
NSURLConnection、CFURL、NSURLSession を使用するすべての接続はATS デフォルトの挙動(=HTTPs通信)になる
▶WebView▶HTTPのWebページは表示しない(内部エラーになる)
▶補足:SFSafariViewControllerはATSの影響を受けない
© 2015 J-Stream Inc. All Rights Reserved. 11
アプリケーション側での対応③回避方法(Info.plist)
▶アプリ内全部のATSを無効にする(Apple非推奨)
▶利用するドメイン限定でATSを無効にする
© 2015 J-Stream Inc. All Rights Reserved. 12
<key>NSAppTransportSecurity</key><dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
<key>NSAppTransportSecurity</key><dict>
<key>NSExceptionDomains</key><dict><key>sample.jp</key>
<dict><key>NSIncludesSubdomains</key> →サブドメインでの利用を許可
<true/><key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> →HTTPの利用を許可
<true/></dict>
</dict></dict>
アプリケーション側での対応④回避方法(Info.plist)
▶暗号化通信の制限を緩和する
▶SFSafariViewControllerを利用する
© 2015 J-Stream Inc. All Rights Reserved. 13
<key>NSAppTransportSecurity</key><dict>
<key>NSExceptionDomains</key><dict>
<key>sample.jp</key><dict>
<key>NSTemporaryExceptionMinimumTLSVersion</key> →TLSの最小バージョンを指定
<string>TLSv1.1</string><key>NSExceptionRequiresForwardSecrecy</key> →ForwardSecrecyの評価をしない(利用できるChiperSuite拡大)
<false/></dict>
</dict></dict>
アプリケーション側での対応⑤Xcodeを使用してATSをオフにする方法
© 2015 J-Stream Inc. All Rights Reserved. 14
▶Projectを選択
▶Supporting Filesを選択
▶Project名-info.plistを選択
▶Information Property Listで+ボタンを押してKeyを増やす
▶増えたKeyにNSAppTransportSecurityを設定し、TypeはDictionaryに。
▶NSAppTransportSecurityで+ボタンを押してKeyを増やす。
▶増えたKeyにNSAllowsArbitraryLoadsを設定し、TypeはBoolean、ValueにYESを設定。
参考:IPv6への対応(NAT64+DNS64)
▶WWDC2015で発表▶参考(英語資料)▶http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_your_app
_and_next_generation_networks.pdf
▶iOS9ではクライアントアプリ側がIPv6環境で正常に通信出来る必要あり
▶Appleの審査でチェックされる(2016年初頭より)
▶AppStore上の無料TOP100アプリ中、30%のアプリは未対応(2015/07現在)
▶NAT64+DNS64対応と呼ばれる事が多い
▶以下のような実装に注意▶IPv4 を前提とした変数/構造体 (uint32_t, in_addr, sockaddr_in)▶IPv4 のみで利用可能なAPI (inet_aton, gethostbyname)▶IPv4 のみで動作するAPI の呼出 (gethostbyname2(hostname, AF_INET))▶IPv4 に依存したネットワークの接続チェックが発生する場合
▶デバイスが IPv4 アドレスを持っているか▶0.0.0.0 に接続できるか
© 2015 J-Stream Inc. All Rights Reserved. 15
まとめApple iOS9(ATS)への対応
▶Apple iOS9以降、Mac OS X v10.11のアプリケーション内通信はサーバー側で以下を満たす必要がある
▶HTTPs(TLSv1.2以上)、指定のCipherSuteを利用、SHA256/2048bit 他
▶サーバー側の対応が難しい場合はアプリケーション側で回避策を利用して対応
▶参考:IPv6対応も忘れずに!
© 2015 J-Stream Inc. All Rights Reserved. 16