Поддержка 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?