簡體   English   中英

OkHttp 3.11 和 TLS 1.2 支持

[英]OkHttp 3.11 and TLS 1.2 support

Android 4.2 中添加了對 TLS v1.2 的支持,但默認情況下未啟用。 通過向 OkHttp 客戶端提供自定義 SSLSocketFactory 實現,使用 OkHttp 3.x 可以很容易地解決此問題:

OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setSocketFactory(new MySSLSocketFactory());

在我的情況下,自定義套接字工廠正在設置啟用的協議,如下所示:

private static final String[] TLS_PROTOCOLS = new String[]{ "TLSv1.1", "TLSv1.2" };

public MySSLSocketFactory(final KeyManager[] keyManagers, final TrustManager trustManager) throws KeyManagementException, NoSuchAlgorithmException {
  final SSLContext sslContext = SSLContext.getInstance(TLS);
  sslContext.init(keyManagers, new TrustManager[]{ trustManager }, null);
  // ...
}

// ...

private Socket enableTLSOnSocket(final Socket socket) {
  if (socket instanceof SSLSocket) {
    ((SSLSocket) socket).setEnabledProtocols(TLS_PROTOCOLS);
  }
  return socket;
}

在最新的 OkHttp 3.11 中我們可以閱讀

修復:首選可用的 TLSv1.2。 在某些較舊的平台上,必須選擇加入 TLSv1.2

我試圖檢查相關提交(可能是這個),但我不確定它是否解決了與自定義工廠相同的問題。

所以我的問題是:當 OkHttp 3.11+ 用於在舊的 Android 設備上保持 TSL 1.2 的使用時,刪除自定義 SSLSocketFactory 是否安全?

我已經使用默認套接字工廠測試了最新的 (3.11) OkHttp 版本

final SSLContext sslContext = SSLContext.getInstance(TLS); sslContext.init(keyManagers, new TrustManager[]{ trustManager }, null); sslContext.getSocketFactory();

不幸的是,盡管 TLSv1.2 可用,但它並不是首選。 現在,我必須繼續使用我自己的 SSLSocketFactory 實現,其中包括 TLSv1.2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM