OkHttp 3.11 и поддержка TLS 1.2 - PullRequest
       30

OkHttp 3.11 и поддержка TLS 1.2

0 голосов
/ 14 сентября 2018

Поддержка TLS v1.2 была добавлена ​​в Android 4.2, но она не была включена по умолчанию.Эту проблему было довольно легко исправить с помощью OkHttp 3.x путем предоставления пользовательской реализации SSLSocketFactory клиенту OkHttp:

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

Я пытался проверить соответствующие коммиты (вероятно, этот ), но я не уверен, если эторешает ту же проблему, что и пользовательская фабрика.

Итак, мой вопрос: безопасно ли удалять пользовательские SSLSocketFactory, когда OkHttp 3.11+ используется для сохранения использования TSL 1.2 на старых устройствах Android?

1 Ответ

0 голосов
/ 19 сентября 2018

Я протестировал последнюю (3.11) версию OkHttp с фабрикой сокетов по умолчанию

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

К сожалению, TLSv1.2 не является предпочтительным, даже если он доступен. Пока я должен продолжать использовать мою собственную реализацию SSLSocketFactory, которая включает TLSv1.2.

...