ATSに対応できているかチェックするツールats_checkerを書いた
追記: El CapitanにATS用のチェックツールが nscurl
に付属したのでそちらをつかうことをおすすめします。
App Transport Security Technote: App Transport Security Technote https://developer.apple.com/library/watchos/technotes/App-Transport-Security-Technote/index.html#//apple_ref/doc/uid/TP40016240-CH1-SW7
/usr/bin/nscurl --ats-diagnostics [--verbose] URL
のように利用できます。
iOS9でApp Transport Securityが適用されます。
要約するとサーバ側でATSに対応するなら以下のことが必要です。
- TLS 1.2以上を使うこと
- Cipherは指定されているものを使うこと
ということでURLがATSに対応できているか*1、というのを調べる簡単なツールを書きました。
以下のように使います。acceptableではない場合にはtlsオブジェクトをとりあえずデバッグのために出力しています。(ちゃんと値を見せてあげないとわかりづらいですが・・・
-> % ats_checker https://google.com https://google.com is acceptable for ATS -> % ats_checker https://example.com https://example.com is acceptable for ATS -> % ats_checker https://apple.com https://apple.com is not acceptable for ATS debug info: &tls.ConnectionState{Version:0x303, HandshakeComplete:true, DidResume:false, CipherSuite:0xc014, NegotiatedProtocol:"", NegotiatedProtocolIsMutual:true, ServerName:"", PeerCertificates:[]*x509.Certificate{(*x509.Certificate)(0xc82049c000), (*x509.Certificate)(0xc82049c480)}, VerifiedChains:[][]*x509.Certificate{[]*x509.Certificate{(*x509.Certificate)(0xc82049c000), (*x509.Certificate)(0xc82049c480), (*x509.Certificate)(0xc8203aed80)}}, SignedCertificateTimestamps:[][]uint8(nil), OCSPResponse:[]uint8(nil), TLSUnique:[]uint8{0x5e, 0x2e, 0xd8, 0x2d, 0x9c, 0x75, 0x56, 0xa4, 0x68, 0xa4, 0x71, 0x61}}
これでATS対応もばっちりですね!