I finally worked it out. For anyone else who might be interested, this
is how it needs to be done
@Override
public void configureHttpClient(HttpClientBuilder clientBuilder) {
try {
SSLContext sslContext = getSSLContext(keyStore, password);
SSLConnectionSocketFactory sslConnectionSocketFactory = new
SNISupportSSLConnectionSocketFactory(sslContext, NOOP_HOSTNAME_VERIFIER);
Registry<ConnectionSocketFactory>
connectionSocketFactoryRegistry =
RegistryBuilder.<ConnectionSocketFactory>create().register("http",
PlainConnectionSocketFactory.getSocketFactory())
.register("https", sslConnectionSocketFactory).build();
HttpClientConnectionManager connectionManager = new
PoolingHttpClientConnectionManager(connectionSocketFactoryRegistry);
clientBuilder.setConnectionManager(connectionManager);
clientBuilder.setDefaultHeaders(Collections.singleton(SNI_HOST_HEADER));
} catch (Exception e) {
throw new RuntimeCamelException(e);
}
}
protected SSLContext getSSLContext(KeyStore keyStore, char[]
password) throws Exception {
KeyManagerFactory keyManagerFactory =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, password);
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(keyManagerFactory.getKeyManagers(),
trustManagerFactory.getTrustManagers(), new SecureRandom());
return sslcontext;
}
private static final class SNISupportSSLConnectionSocketFactory
extends SSLConnectionSocketFactory {
public SNISupportSSLConnectionSocketFactory(SSLContext
sslContext, HostnameVerifier hostnameVerifier) {
super(sslContext, hostnameVerifier);
}
@Override
protected void prepareSocket(SSLSocket socket) throws IOException {
List<SNIServerName> serverNames =
Collections.singletonList(SNI_HOST_NAME);
SSLParameters sslParameters = socket.getSSLParameters();
sslParameters.setServerNames(serverNames);
socket.setSSLParameters(sslParameters);
super.prepareSocket(socket);
}
}