TLSv1.2 って何ですか・・・
事の発端はアプリから SSL 通信で CGI にアクセスし、JSON データを受領しようとした事。
NSURLRequest を使って、簡単・簡単、と思ったら、推奨していないので、NSURLSession を使えと叱られる。うわーめんどくセーと思いながら渋々書き換えたところ、error 発生。どういうわけか、ここだけ日本語でエラー表示。
Error Domain=NSURLErrorDomain Code=-1200 "SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。
何かいつもと様子が違うので、ググってみたら、iOS 9 から TSL v1.2 となっていて、Web サーバ側での対応がとれてていないのでエラーになっている感じ。Web サーバは当方管轄外なので、回避策はないのかさらに調べたところ、まず、console で通信しようとしている Web サーバの対応状況を調べ、次に、info.plist に例外記載すればよいらしい。
console で調査:
/usr/bin/nscurl --ats-diagnostics https://some_domain
TLSv1.2 with PFS disabled and insecure HTTP allowed
Result : FAIL
---
---
TLSv1.1 with PFS disabled and insecure HTTP allowed
Result : FAIL
---
---
TLSv1.0 with PFS disabled and insecure HTTP allowed
Result : PASS
はいはい、v1.0 じゃないとダメなのね、ということで、今度は info.plist に以下の記載を追加。
App Transport Security Settings, dictionary
Exception Domains, dictionary
domain_name, dictionary
NSIncludesSubdomains, Boolean, YES
NSThirdPartyExceptionRequiresForwardSecrecy, Boolean, NO
NSThirdPartyExceptionMinimumTLSVersion, string, TLSv1.0
どこに追加するのかよくわからなかったので、Information Property List のすぐ下に追加しましたが、ちゃんと設定されたようで、うまく通信できました。
これ、普通わかんないよね。
ふうぅぅぅ。