不具合が発生したversion
ios 10.1系
不具合の現象
- iphoneのネイティブアプリからHTTPSのURLを叩き外部サイトを参照とした時に下記のようなキャプチャのエラーとなってしまった
- 少し前はなんとも無くURLを開けていたのに😨
キャプチャ
デバッグ
- まずはこのエラー文言でググった
An SSL error has occurred
とかで - そうするとApple社のATSという情報が色々とヒットしてきた
- 実機でiPhoneアプリから色々とURLを叩いて検証した
- OpenSSLが入ってネットにつながってるサーバ上で
openssl
のs_client
を使って上記のエラーにならないURL、エラーになるURLを叩いてみて差分を見てみた - SSL/TLSのバージョンが怪しいかもって勘づいた
- そうだとするとATS関連かもとさらに思い始めた
原因
- 簡単に言うとApple社のATS(App Transport Security)の設定が起因していた
- TLSのバージョンが低かったのが原因
- WWDCでATSが必須になるって情報あったなーっと
- 公式はこのあたり
なぜ今頃に不具合が出てきたか
- 2016年末にApp Storeに公開するアプリにはATSが必須になってるっぽい。だから今ごろこの問題が出てきた
解決にむけて
まず、ATSの主な要件は?
- TLSのバージョンが1.2 以上
- SHA256 以上のフィンガープリント
- 2048 ビット以上のRSAキー、もしくは 256 ビット以上の Elliptic-Curve
- 暗号スイート (暗号アルゴリズムの組み合わせ) 多すぎて書けない
参考)http://sehermitage.web.fc2.com/crypto/ssl_suite.html
開こうとしたURLのサーバのSSLまわりの設定を上記の要件を満たす事が必要
で開こうとしたURLは管理下のサーバでよく調べて見たらAWSのELBを使ってた
解決へ
ELBにはこのあたりの設定が簡単にできる
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-security-policy-table.html
AWSは概ね最新のSSLのセキュリティポリシーを適用を推奨しているが、対応するブラウザするブラウザとかちょっと確認しておいたほうが良いかなと思った
GAとかのログからユーザが主に使ってるブラウザと照らし合わせるとかして
まとめ
- AWSのELBは立ち上げたときにSSLのセキュリティポリシーを決めると思うが、その後しばらく運用していくと設定を見直す事を忘れてしまう...何かアラートとかくれるとありがたい😅
- これに限らず設定が古くなってる可能性があるかも?みたいなチェックする仕組み必要かもと思った
- まぁでも早く解決できた良かった😀