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

iOS9, Xcode7 betaに更新していざアプリの実行/テストをしようとしたら

Error Domain=NSURLErrorDomain Code=-999 “The operation couldn’t be completed. (NSURLErrorDomain error -999.)”

とか言われてHTTPでの通信が強制的にHTTPSになるのを防ぐ方法です。ATSを無効にする方法だけでなく、影響範囲だとか、White List作って対応する方法等を追記しました。

スポンサーリンク

概要

iOS9からNSURLRequest等を使うとHTTPでリクエスト作っているのに強制的にHTTPSに置き換わる。
こんなコードを書くと

こんなログになる。。。

HTTPでリクエストしたのに即キャンセルされ代わりにHTTPSでリクエストされているのがわかる。

これはApp Transport Security(ATS)という機能らしい。ドキュメントやビデオを見ていると今すぐではないものの今後、HTTPでのリクエストは使えなくしていく気満々な模様。
ATSについてざっくりまとめるとこんな感じ。

  • ATSによってHTTPリクエストは自動的にHTTPSリクエストに置き換わる
  • HTTPSを使用する事を推奨する
  • TLSv1.2以上に対応している必要がある
  • 上記の例外をInfo.plistに設定することができる

影響範囲

すべては把握していないのでわかっている範囲で

  • NSURLRequestを使用するすべて
    • NSURLConnection
    • NSURLSession
    • UIWebView
    • WKWebView
    • etc…
  • CFNetwork

回避方法

ATSを無効にする

アプリのinfo.plistに下記を追加し、ATSを無効にする。
推奨はされていない。

例外となるドメインを設定する

Info.plistにATSの対象にしないドメインを設定する。

他にも

  • NSIncludesSubdomains
  • NSTemporaryExceptionMinimumTLSVersion
  • NSRequiresCertificateTransparency
  • NSTemporaryExceptionRequiresForwardSecrecy
  • NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads
  • NSTemporaryThirdPartyExceptionMinimumTLSVersion
  • NSTemporaryThirdPartyExceptionRequiresForwardSecrecy

などの設定項目があって細かく設定することができる。
webviewとか使うアプリは手動でドメイン登録するのは辛そう。

厳密にはSSLじゃなくてHTTPSって書くのが正しいんじゃないかとか思ったけど今更だしそのままで

スポンサーリンク
スポンサーリンク

『【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法』へのコメント

  1. 名前:PROGRAMMING NOTE » iOS9で通信プロトコルを https → http とする方法 投稿日:2015/08/10(月) 22:58:04 ID:465d2a437 返信

    […] 【参考】 iOS9でHTTP通信がSSL通信になるのを防ぐ方法 […]

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

  3. […] 【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法 http://nlogic.jp/?p=412 […]

    • 名前:Rangle 投稿日:2016/06/24(金) 13:12:26 ID:b8f99c6e7 返信

      I recently found your internet site and have been reading along. I figured I would leave my initial comment. Nice blog. I’ll keep visiting this internet site very frlequntey. Thanks

  4. 名前:Xcode 6 & Swift事始め、Web Viewを組み込む(超初心者編) | mae's blog 投稿日:2015/12/26(土) 03:19:37 ID:f85d3372f 返信

    […] 【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法 – 抹茶のメモ帳 […]

コメントをどうぞ

メールアドレスが公開されることはありません。