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);
        }
    }

Reply via email to