接続先が ATS に対応しているかを調べる手立て

# 特定ドメインの TLS バージョンや Cipher Suite を調べたい

iOS 9 の App Transport Security いわゆる ATS はなかなか厳しい条件かもしれませんが、Info.plist の定義次第ではその条件を緩和することができます。（Info.plist の定義方法については資料を参照ください。）
※2017年以降からはATSが必須になるとWWDC16でアナウンスされました。

そしてそのためには TLS プロトコルのバージョン、Cipher Suite を把握する必要があります。身内のサービスであればサーバー管理者に聞けば良いのですが、外部の API を利用しているという場合にはそれが ATS に対応する条件なのかどうかはなかなか判断しづらいところがあります。そこで、以下のツール、サービスを利用してみるとよいかもしれません。


# nscurl

nscurl コマンドを使えば簡単に調べられます。`Result : PASS` となった項目は成功です。
nscurl は OS X 10.11 El Capitan 以降で使えます。

```
$ nscurl --ats-diagnostics https://…/
```
```
================================================================================

Default ATS Secure Connection
---
ATS Default Connection
Result : PASS
---

================================================================================
```

# SSL Server Test

https://www.ssllabs.com/ssltest/index.html

フォームにドメインを入力すると諸々を検証できます。Cipher Suite の内容とプロトコル（TLS バージョン）を列挙してくれます。
ログが残るようなので注意してください。

# CipherScan

CipherScan
https://github.com/jvehent/cipherscan

指定ドメインの Cipher Suite の内容とプロトコルを検証できるコマンドです。`coreutils` の導入を促されたらまず brew で入れましょう。（OS X）

## 使い方

```:cipherscan/READMEより抜粋
$ ./cipherscan google.com
...................
Target: google.com:443

prio  ciphersuite                  protocols                    pfs                 curves
1     ECDHE-RSA-CHACHA20-POLY1305  TLSv1.2                      ECDH,P-256,256bits  prime256v1
2     ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                      ECDH,P-256,256bits  prime256v1
3     ECDHE-RSA-AES128-SHA         TLSv1.1,TLSv1.2              ECDH,P-256,256bits  prime256v1
4     ECDHE-RSA-RC4-SHA            SSLv3,TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1
5     AES128-GCM-SHA256            TLSv1.2                      None                None
6     AES128-SHA256                TLSv1.2                      None                None
7     AES128-SHA                   TLSv1.1,TLSv1.2              None                None
8     RC4-SHA                      SSLv3,TLSv1,TLSv1.1,TLSv1.2  None                None
9     RC4-MD5                      SSLv3,TLSv1,TLSv1.1,TLSv1.2  None                None
10    ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                      ECDH,P-256,256bits  prime256v1
11    ECDHE-RSA-AES256-SHA384      TLSv1.2                      ECDH,P-256,256bits  prime256v1
12    ECDHE-RSA-AES256-SHA         SSLv3,TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1
13    AES256-GCM-SHA384            TLSv1.2                      None                None
14    AES256-SHA256                TLSv1.2                      None                None
15    AES256-SHA                   SSLv3,TLSv1,TLSv1.1,TLSv1.2  None                None
16    ECDHE-RSA-AES128-SHA256      TLSv1.2                      ECDH,P-256,256bits  prime256v1
17    ECDHE-RSA-DES-CBC3-SHA       SSLv3,TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1
18    DES-CBC3-SHA                 SSLv3,TLSv1,TLSv1.1,TLSv1.2  None                None

Certificate: trusted, 2048 bit, sha1WithRSAEncryption signature
TLS ticket lifetime hint: 100800
OCSP stapling: not supported
Cipher ordering: server
```


# 参考資料

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/
http://kanny.hateblo.jp/entry/2015/09/08/001903
http://www.atmarkit.co.jp/ait/articles/0106/16/news001_2.html
http://blog.kishikawakatsumi.com/entry/2015/10/19/121257
http://stackoverflow.com/questions/32723623/how-do-i-install-nscurl-on-mac-os-x-10-10-yosemite