2018年2月20日 星期二

[Android] OkHttp3 TLS 1.2 連線寫法

問題:我有WebService連線要用 TLS1.2,那用OkHttp要怎麼寫呢?

參考:OkHttp WikiOkHttp IssuesDevAreaDevAndroid-SSLSocketDevAndroid-SSLContext

說明:
根據DevAndroid-SSLSocket的表格,API16+可支援TLS1.2但不是預設,到API20+才是,那這是甚麼意思呢?

就是說:
  • 你Build.VERSION.SDK_INT<16就完全不能用TLS1.2。
  • 你Build.VERSION.SDK_INT是16~19可以用,但要多寫一些code。
  • 你Build.VERSION.SDK_INT>=20可以用,而且不用多寫code。
有沒有覺得MIN>20好棒呀 XD

那<16的支援方式我就不管了,畢竟現在2018了,新專案還要MIN 15也太低了..


那16~19的寫法簡單說,
  1. 要extends SSLSocketFactory寫一個處理TLS的Factory,叫Tls12SocketFactory 好了,可看OkHttp IssuesDevArea的寫法

  2. 針對Build.VERSION.SDK_INT16~19的要多做以下:
    Tls12SocketFactory tlsSocketFactory = new Tls12SocketFactory(sc.getSocketFactory());
    client.sslSocketFactory(tlsSocketFactory , Platform.get().trustManager(tlsSocketFactory));

    OkHttp Issues中,的client.sslSocketFactory只有第1個參數的寫法已經deprecated了,還是要有第2參數X509TrustManager,可從Factory中取出。

  3. client要再設啥connectionSpecs可再設。
而20+的寫法就是少掉第1、2點即可。


其他關於OkHttp的HTTPS設定,可看OkHttp Wiki



沒有留言:

張貼留言