在 Java 6 上使用 httpClient 4.3.6 在客户端强制协议
Force protocol in Client using httpClient 4.3.6 on 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。
这将强制 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();
出于某些测试原因,我需要强制客户端使用 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 仅使用 SSLv3
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
SSLContext.getDefault(), new String[] {"SSLv3"}, null, SSLConnectionSocketFactory.STRICT_HOSTNAME_VERIFIER);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslSocketFactory)
.build();