iOS ATS


iOS9からiOSアプリにおいてATS(App Transport Security)がデフォルトで有効化されます。このATSにより、iOSアプリではSSL通信が強制されるようになります。今回はこの影響についてまとめます:

iOSにおけるSSLの強制適用

  • ATSがデフォルトで有効化される条件
    • アプリをiOS9用にビルドした場合(Xcode7)
      • iOS8以前向けにビルドした場合、ATSの強制適用は行われない
  • ATS有効化の影響範囲
    • 概要
      • アプリからの通信において、HTTPアクセスがエラーとなる
    • 対象となるAPI
      • NSURLConnection, CFURL, NSURLSession
    • 関連クラス
      • WebView
        • HTTPのWebページは表示しない(内部エラー)
      • 補足
        • SFSafariViewControllerはATSの影響を受けない
    • 補足
      •  ATSによるHTTPSへの自動変換は行われない
        • アプリに埋め込んだURLは、すべてHTTPSへの変換が必要
      • サーバ側におけるHTTPのリダイレクト動作も不可(最初のHTTPアクセスが許可されない)
  • ATSの無効化
    • アプリの設定ファイル(Info.plist)において、ATSの詳細設定が可能

必要となるSSLの条件

  • SSLバージョン:TLS 1.2
    • 補足
      • 2015年9月時点における最新規定(1.3はドラフト)
  • 鍵交換アルゴリズム
    • ECDHE (Elliptic Curve Diffie-Hellman key exchange, Ephemeral)
    • 補足
      • ATSではサポートされないForward Secrecy
        • DHE (Diffie-Hellman key Exchange)
        • ECDH (Elliptic curve Diffie–Hellman)
  • SSL証明書
    • 署名
      • SHA256以上(SHA-2)
    • 公開鍵の鍵長
      • RSA:2048以上
      • EC:256以上
    • SSL証明書が適切に設定されていること
      • SSL証明書エラーが発生した場合、通信を許さない
  • 対応する暗号スイート
    • 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

Info.plist

  • 全体
    • NSAllowsArbitraryLoads:すべてのドメインに対して無効化(Default:false)
  • 個別ドメイン
    • <domain-name-for-exception-as-string>:制御するドメイン名
      • NSExceptionMinimumTLSVersion: 要求するTLSバージョン(Default:TLS1.2)
      • NSExceptionRequiresForwardSecrecy: ForwardSecrecyの要求(Default:ture)
      • NSExceptionAllowsInsecureHTTPLoads: HTTPS(証明書等)エラー時の接続を許すか(Default:false)
      • NSRequiresCertificateTransparency: 透かし入り証明書(Certificate Transparency)を要求するか(Default:false)
      • NSIncludesSubdomains:本設定をサブドメインまで適用するか(Default:false)
      • サードパーティ(他社ドメイン)用設定
        • NSThirdPartyExceptionMinimumTLSVersion:要求するTSLバージョン
        • NSThirdPartyExceptionRequiresForwardSecrecy:ForwardSecrecyの要求
        • NSThirdPartyExceptionAllowsInsecureHTTPLoads:HTTPエラー時の接続を許すか

補足

  • Forward Secrecy (前方秘匿性)
    • SSL証明書の秘密鍵が漏洩しても、過去の通信に対する解読を不可能とすること
  • Certificate Transparency (CT)

参考文献