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 のすぐ下に追加しましたが、ちゃんと設定されたようで、うまく通信できました。

これ、普通わかんないよね。

ふうぅぅぅ。