【问题标题】:Force protocol in Client using httpClient 4.3.6 on Java 6在 Java 6 上使用 httpClient 4.3.6 强制客户端协议
【发布时间】:2018-03-08 07:30:06
【问题描述】:

出于某些测试原因,我需要强制客户端使用 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。

【问题讨论】:

  • 真的必须是 HC 4.3 而不是更新版本吗?
  • 是的,我必须使用 HC 4.3.6。

标签: java ssl apache-httpclient-4.x java-6 sslv3


【解决方案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();

【讨论】:

  • ......*** ClientHello, SSLv3 ......RandomCookie: GMT: 1503744762 它工作了谢谢
猜你喜欢
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多