74 lines
3.0 KiB
Java
74 lines
3.0 KiB
Java
package com.baeldung.tlsversion;
|
|
|
|
import java.io.IOException;
|
|
|
|
import javax.net.ssl.SSLSocket;
|
|
|
|
import org.apache.hc.client5.http.classic.methods.HttpGet;
|
|
import org.apache.hc.client5.http.config.TlsConfig;
|
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
|
|
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
|
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
|
|
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
|
|
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
|
|
import org.apache.hc.core5.http.HttpEntity;
|
|
import org.apache.hc.core5.http.io.entity.EntityUtils;
|
|
import org.apache.hc.core5.http.ssl.TLS;
|
|
import org.apache.hc.core5.ssl.SSLContexts;
|
|
import org.apache.hc.core5.util.Timeout;
|
|
|
|
public class ClientTlsVersionExamples {
|
|
public static CloseableHttpClient setViaSocketFactory() {
|
|
final HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
|
|
.setDefaultTlsConfig(TlsConfig.custom()
|
|
.setHandshakeTimeout(Timeout.ofSeconds(30))
|
|
.setSupportedProtocols(TLS.V_1_2, TLS.V_1_3)
|
|
.build())
|
|
.build();
|
|
|
|
return HttpClients.custom()
|
|
.setConnectionManager(cm)
|
|
.build();
|
|
}
|
|
|
|
public static CloseableHttpClient setTlsVersionPerConnection() {
|
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(SSLContexts.createDefault()) {
|
|
@Override
|
|
protected void prepareSocket(SSLSocket socket) {
|
|
String hostname = socket.getInetAddress()
|
|
.getHostName();
|
|
if (hostname.endsWith("internal.system.com")) {
|
|
socket.setEnabledProtocols(new String[] { "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3" });
|
|
} else {
|
|
socket.setEnabledProtocols(new String[] { "TLSv1.3" });
|
|
}
|
|
}
|
|
};
|
|
|
|
HttpClientConnectionManager connManager = PoolingHttpClientConnectionManagerBuilder.create()
|
|
.setSSLSocketFactory(sslsf)
|
|
.build();
|
|
|
|
return HttpClients.custom()
|
|
.setConnectionManager(connManager)
|
|
.build();
|
|
|
|
}
|
|
|
|
// To configure the TLS versions for the client, set the https.protocols system property during runtime.
|
|
// For example: java -Dhttps.protocols=TLSv1.1,TLSv1.2,TLSv1.3 -jar webClient.jar
|
|
public static CloseableHttpClient setViaSystemProperties() {
|
|
return HttpClients.createSystem();
|
|
// Alternatively:
|
|
//return HttpClients.custom().useSystemProperties().build();
|
|
}
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
try (CloseableHttpClient httpClient = setViaSocketFactory(); CloseableHttpResponse response = httpClient.execute(new HttpGet("https://httpbin.org/"))) {
|
|
|
|
HttpEntity entity = response.getEntity();
|
|
EntityUtils.consume(entity);
|
|
}
|
|
}
|
|
} |