Залп с OkHttp не использует перезаписанную версию TLS, а принимает версию TLS системы по умолчанию
Я пытался использовать OkHttp с Volley. Я пытался использовать метод OkHttpClient.sslSocketFactory(SSLSocketFactory sslSocketFactory), чтобы перезаписать версию TLS, но это, по-видимому, не рекомендуется. Я использовал альтернативный метод sslsocketfactory (метод ниже), но он не работает для меня.
OkHttpClient.sslSocketFactory (SSLSocketFactory sslSocketFactory, X509TrustManager trustManager) Я изменил версию TLS на 1.2, а для trustManager я использовал системный стандарт по умолчанию trustManager. Но версия TLS, отправляемая во время вызова API, является версией устройства, а не версией, которую я перезаписал.
Мой метод sslSocketFactory:
SSLContext context = SSLContext.getInstance ("TLS");
context.init (null, null, null);
sslSocketFactory = context.getSocketFactory ();
Также версия TLS я включил.
((SSLSocket) сокет).setEnabledProtocols(new String[] {"TLSv1.2"});
Мой метод trustManager:
общедоступный статический X509TrustManager getSystemDefaultTrustManager ()
{
пытаться {
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance (
TrustManagerFactory.getDefaultAlgorithm ());
trustManagerFactory.init ((KeyStore) null);
TrustManager [] trustManagers = trustManagerFactory.getTrustManagers ();
if (trustManagers.length! = 1 ||! (trustManagers [0] instanceof X509TrustManager)) {
бросить новое IllegalStateException("Неожиданные доверительные управляющие по умолчанию:" + Arrays.toString (trustManagers));
}
return (X509TrustManager) trustManagers [0];
catch (GeneralSecurityException e)
{
бросить новый AssertionError(); // Система не имеет TLS. Просто сдавайся.
}
}
Я также использовал вышеупомянутый trust manager для установки в sslSocketFactory, но, похоже, ничего не работает.
SSLContext context = SSLContext.getInstance ("TLS");
context.init (null, getSystemDefaultTrustManager (), null);
sslSocketFactory = context.getSocketFactory ();
Любая помощь будет высоко ценится, TIA.