Принудительный протокол в клиенте с использованием httpClient 4.3.6 на Java 6

По какой-то причине тестирования мне нужно заставить SSLv3 использоваться Клиентом. SSLv3 - это принятый протокол на сервере. Попытка принудительного использования с использованием SSLContextBuilder.useProtocol("SSLv3"), как показано ниже:

SSLContextBuilder инициируется, как показано ниже:

    SSLContextBuilder builder = SSLContexts.custom();

    SSLContext sslContext = builder.useProtocol("SSLv3").build();

    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
        @Override
        public void verify(String host, SSLSocket ssl) throws IOException {
        }
     ....
     ....);
    return sslsf;
}

Но результат в журнале показывает, что рукопожатие всегда делают в TLSv1:

....
....
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
%% No cached client session
*** ClientHello, TLSv1
RandomCookie:  
GMT: 1503650935 
bytes = { 
255, 
....
....

Насколько я понимаю, клиент должен запросить протокол, который определен, принимает ли сервер или нет. В этом случае я ожидаю увидеть, что клиент должен запрашивать использование SSLv3, а не TLSv1.

1 ответ

Решение

Это заставит HC 4.3 использовать только SSLv3

SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
        SSLContext.getDefault(), new String[] {"SSLv3"}, null, SSLConnectionSocketFactory.STRICT_HOSTNAME_VERIFIER);
CloseableHttpClient httpClient = HttpClients.custom()
        .setSSLSocketFactory(sslSocketFactory)
        .build();
Другие вопросы по тегам