LoginSignup
26
25

More than 5 years have passed since last update.

Xcode7(iOS 9SDK)のATSでの謎

Last updated at Posted at 2015-08-08

2015.10.13 追記
本文中の mobile.twitter.com の接続を確認しました。
どうもFirefoxなどで確認するとTwitter側のサーバ側の暗号化方式が

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
になっているよう?です。

結局暗号化方式が問題だったのかわかっていないので、SSL/TLS周りをもう少し勉強しときます。
詳しく書けずに申し訳(・ω・`)

何にせよ、ATS対応は必要なので、アプリで対応するかサーバで対応するか
プロジェクト毎に適切な対応をしていくことが大事ですね(´・ω・`)


雑な文章&内容がない記事でごめんなさい(>人<;)
誤りあったらコメントで指摘ください!!!


ATS(App Transport Security)ってなに?

ざっくりいうと、
 Xcode7(iOS9 SDK)でビルドするとHTTPS通信以外は禁止だよ!凄いね!安全だね!
って機能。
※詳しくはiOS9 ATS問題の記事でまとめてくれてるのでみてね!

通信を全く使わないアプリはあまりないと思うし、WebAPIとのやりとりを行うことは多いはず。
特に個人開発では自前のWebAPIにHTTPS自体やっているケースは少ないと思うので結構な人が対象になるのかなと思う。

HTTPSっていっても・・・

App Transport Security Technoteを読むと・・・

  • TLSは1.2じゃないとダメだよ!
  • 暗号方式はこの中にあるものにしなきゃダメだよ!

    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

  • 2048bit以上のRSA鍵 or 256bit以上のECC鍵 の SHA256の拇印が必要だよ!

  • 無効な証明書では接続できないよ!

・・・って条件があるみたい。

じゃあ、やってみよう!

検証のためにHTTPS化されている&上記の条件に合致しているサイトで実際にWebViewで試してみたところ・・・

Googleに接続すると・・・・HTTPSでちゃんと表示される!OK!

Google

Twitterに接続すると、あれエラー!?

Twitter

・・・えっ!なんで!?

で、原因を探ってみたところ

NSExceptionRequiresForwardSecrecy
A Boolean value for overriding the requirement that the domain support forward secrecy using ciphers.

YES is the default value and limits the ciphers to those shown in Default Behavior.

Setting the value to NO adds the following the list of accepted ciphers:

TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA

の例外指定を"NO"とするといける!

mobile.twitter.com の暗号化方式は

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

なので"YES"のままでも問題ないはずなんだけど・・・。

深まる謎、そしてどうするか・・・

記載している通り、まとめの例外指定を追加すると動作する。・・・だけど、結局は暫定対応なので今後Rejectされる可能性がある。
理由がわからないと、ドキュメント通りに対応しても実際にやってみなきゃわからないって最悪な状態に・・・誰か助けて´д` ;


つぶやき・・・

  • App Transport Security TechnoteにApple公式の情報がちゃんと書いてあるのでよく読んでね!
  • 単純にHTTPSにすれば良いってものじゃないので、外部サービスを複数使っているとそれぞれに対応依頼しなきゃダメだよ!
  • WebViewではリンク先などもATS対象となるので、TOPページだけの対応はNGだから気をつけてね!
  • PaaSでWebAPI作っている人はPaasが対応するだろうから関係ないかも!
  • これがきっかけでHTTP2も一気に広まるといいね!
26
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25