まーた、あっという間に2ヶ月ほど経過してしまいました。なにをしていたかというと、まあ、引越しです。まだ、完全には終わってませんが、やっと、光回線の引き直し、屋内LANの配線工事、家のネットワーク再設定やらで忙しかったのです。
というわけで、前に書こうと思っていたATSに関することです。iOS8あたりから導入され、今年からは審査にはATS必須(なんか猶予されたような記事見かけましたが)となりhttpでの通信が激しく制限されてhttpsを用いないと、ダメな感じです。
httpでの通信を頑なに貫き通すのであればinfo.plistでNSAllowsArbitraryLoadsをYESにして、審査時に説明を加えればいいとは思いますが、Appleというか世界の流れとしてSSL/TLSでの通信は推奨から標準になってきているので、そのうち説明をするどころか、門前払いになってもおかしくありません。そもそも、説明するのがめんどくさいので、やりたくありません。
ちなみに、変更するとAppleに正当な説明が必要になるキーは以下の通りです
- NSAllowsArbitraryLoads (iOS9以上)
- NSExceptionAllowsInsecureHTTPLoads (iOS9以上)
- NSExceptionMinimumTLSVersion (iOS9以上)
では、説明を不要にするにはどうしたらいいんでしょうか?
NSAllowsArbitraryLoadsは、http通信なんでもOkにする!のプロバティです。不特定のサーバーにhttpリクエストを出すアプリなんかは例外も設定できないので無理なんでしょうね。ランキングなど自サーバーなど特定のサイト(https接続に変更できるサーバー)はException Domainsで設定すればよいのでNOでいきましょう。
レンタルサーバーでもhttps接続をサポートするところは結構あります。借りるときに共用SSLがあるとかの記載があるはずです。しかしながら、TLSのバージョンや暗号化スイートの詳細の記載がある会社は少ないです。借りる前であればサポートに問い合わせて見るのが一番手っ取り早いと思います。すでに借りているサーバーの場合は、共用SSLのアドレスを下のサイトでチェックをかけて、利用可能なプロトコルと暗号化スイートを確認します。
SSL Server Test
実際の結果などは後ほど記載します。まぁ独自にSSLの証明書をとるのもいいんですが、お金がかかるの事が多い難点です。
次に、NSExceptionAllowsInsecureHTTPLoadsです。これは前述のNSAllowsArbitraryLoadsがNOの時に有効になるプロパティです。YESにするとhttp通信ができる様になったり、証明書が切れてても接続できる様になります。指定したドメイン毎にも設定できると思います。つまり、NSAllowsArbitraryLoadsは全ドメインに対してのATS無効、NSExceptionAllowsInsecureHTTPLoadsは特定ドメインへのATS無効のような感じで捉えるといいのではないかと思います。Appleへの説明が嫌なのでNOとします。つまりは、SSL/TLSでの接続が必須ということになります。
最後にNSExceptionMinimumTLSVersionですが、これはデフォルトではTLS1.2です。変更すると説明が必要となりますのでTLS1.2が必須となります。ちなみに、SSL/TLSはSSLv3に重大な欠陥が発見され、TLSでの通信が一般的になっています。サイトを見るとSSL通信という言い回しはSSL/TLSのことを指すこともあれば、SSL自体のことを言うこともあり、ちょっとややこしいです。一応、ここでは明確にSSL/TLSと書くことにします。ちなみに、TLS1.1以下を指定する場合はAppleへの説明が必要で、SSLは使用すら想定されていません。
一番いいのは、サーバーを構築している方は、おとなしくプロトコルTLS1.2で、Appleが指定する暗号化スイーツで接続するのが一番安心安全と思われます。ちなみにAppleが指定する暗号化スイーツは
- 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
となります。この要件を満たせれば越したことがありませんが、実際のところレンタルサーバーは、どんな感じなんでしょうか。そこは次の記事に書こうと思います。