Доверие всем сертификатам с помощью okHttp

В целях тестирования я пытаюсь добавить фабрику сокетов в мой клиент okHttp, который доверяет всему, пока установлен прокси. Это было сделано много раз, но моя реализация доверяющей фабрики сокетов, похоже, чего-то не хватает:

class TrustEveryoneManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }

    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }

    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}
OkHttpClient client = new OkHttpClient();

final InetAddress ipAddress = InetAddress.getByName("XX.XXX.XXX.XXX"); // some IP
client.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ipAddress, 8888)));

SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = new TrustManager[]{new TrustEveryoneManager()};
sslContext.init(null, trustManagers, null);
client.setSslSocketFactory(sslContext.getSocketFactory);

Из моего приложения не отправляются никакие запросы, и никакие исключения не регистрируются, поэтому кажется, что это происходит тихо в okHttp. После дальнейшего расследования, кажется, что есть исключение, поглощенное в okHttpConnection.upgradeToTls() когда рукопожатие навязывается. Исключение, которое мне дают:javax.net.ssl.SSLException: SSL handshake terminated: ssl=0x74b522b0: SSL_ERROR_ZERO_RETURN occurred. You should never see this.

Следующий код производитSSLContext который работает как шарм при создании SSLSocketFactory, который не выдает никаких исключений:

protected SSLContext getTrustingSslContext() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
    final SSLContextBuilder trustingSSLContextBuilder = SSLContexts.custom()
            .loadTrustMaterial(null, new TrustStrategy() {
                @Override
                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    return true; // Accepts any ssl cert whether valid or not.
                }
            });
    return trustingSSLContextBuilder.build();
}

Проблема в том, что я пытаюсь полностью удалить все зависимости Apache HttpClient из моего приложения. Базовый код с Apache HttpClient для созданияSSLContext кажется достаточно простым, но я явно что-то упускаю, так как не могу настроитьSSLContext чтобы соответствовать этому.

Кто-нибудь сможет создать реализацию SSLContext, которая делает то, что я хотел бы, без использования Apache HttpClient?

Ответы на вопрос(5)

Ваш ответ на вопрос