diff --git a/ribbon-transport/src/main/java/com/netflix/ribbon/transport/netty/http/LoadBalancingHttpClient.java b/ribbon-transport/src/main/java/com/netflix/ribbon/transport/netty/http/LoadBalancingHttpClient.java index f21244c39..2d7eb4e38 100644 --- a/ribbon-transport/src/main/java/com/netflix/ribbon/transport/netty/http/LoadBalancingHttpClient.java +++ b/ribbon-transport/src/main/java/com/netflix/ribbon/transport/netty/http/LoadBalancingHttpClient.java @@ -38,8 +38,12 @@ import io.reactivex.netty.protocol.http.client.HttpClientResponse; import io.reactivex.netty.servo.http.HttpClientListener; +import java.net.MalformedURLException; import java.net.URI; +import java.net.URL; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -48,7 +52,13 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import javax.net.ssl.SNIHostName; +import javax.net.ssl.SNIServerName; import javax.net.ssl.SSLEngine; +import javax.net.ssl.SSLParameters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import rx.Observable; import rx.functions.Func1; @@ -84,7 +94,7 @@ public class LoadBalancingHttpClient extends LoadBalancingRxClientWithPool implements HttpClient { private static final HttpClientConfig DEFAULT_RX_CONFIG = HttpClientConfig.Builder.newDefaultConfig(); - + private static final Logger logger = LoggerFactory.getLogger(LoadBalancingHttpClient.class); private final String requestIdHeaderName; private final HttpRequestIdProvider requestIdProvider; private final List, HttpClientResponse>> listeners; @@ -511,6 +521,23 @@ protected HttpClient createRxClient(Server server) { @Override public SSLEngine createSSLEngine(ByteBufAllocator allocator) { SSLEngine myEngine = super.createSSLEngine(allocator); + + URL url = null; + if(null!=getRxClients()) { + try { + SSLParameters sslParameters = new SSLParameters(); + List sniServerNames = new ArrayList<>(); + for(Server server: getRxClients().keySet()) { + url = new URL(server.getScheme() + "://" + server.getHost()); + sniServerNames.add(new SNIHostName(url.getHost())); + } + sslParameters.setServerNames(sniServerNames); + myEngine.setSSLParameters(sslParameters); + } catch (MalformedURLException e) { + logger.error("MalformedURL: " + url.toString()); + } + } + myEngine.setUseClientMode(true); return myEngine; }