すずけんメモ

技術メモです

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が適用されます。

developer.apple.com

要約するとサーバ側でATSに対応するなら以下のことが必要です。

  • TLS 1.2以上を使うこと
  • Cipherは指定されているものを使うこと

ということでURLがATSに対応できているか*1、というのを調べる簡単なツールを書きました。

github.com

以下のように使います。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対応もばっちりですね!

*1:ただしデフォルトの条件に限るので、iOSアプリ側でATSの設定を緩くしている場合などは考慮していない。