Skip to content

Commit a7644b7

Browse files
authored
Expose tlsNegotiationTimeout for netty client (#2806)
* Expose tlsNegotiationTimeout for netty client * Fix javadocs
1 parent 92b4f6c commit a7644b7

File tree

12 files changed

+100
-26
lines changed

12 files changed

+100
-26
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"category": "Netty NIO HTTP Client",
3+
"contributor": "",
4+
"type": "feature",
5+
"description": "Allow users to configure tlsNegotiationTimeout on NettyNioAsyncHttpClient"
6+
}

http-client-spi/src/main/java/software/amazon/awssdk/http/SdkHttpConfigurationOption.java

+9
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,20 @@ public final class SdkHttpConfigurationOption<T> extends AttributeMap.Key<T> {
121121
public static final SdkHttpConfigurationOption<TlsTrustManagersProvider> TLS_TRUST_MANAGERS_PROVIDER =
122122
new SdkHttpConfigurationOption<>("TlsTrustManagersProvider", TlsTrustManagersProvider.class);
123123

124+
/**
125+
* The maximum amount of time that a TLS handshake is allowed to take from the time the CLIENT HELLO
126+
* message is sent to the time the client and server have fully negotiated ciphers and exchanged keys.
127+
*/
128+
public static final SdkHttpConfigurationOption<Duration> TLS_NEGOTIATION_TIMEOUT =
129+
new SdkHttpConfigurationOption<>("TlsNegotiationTimeout", Duration.class);
130+
124131
private static final Duration DEFAULT_SOCKET_READ_TIMEOUT = Duration.ofSeconds(30);
125132
private static final Duration DEFAULT_SOCKET_WRITE_TIMEOUT = Duration.ofSeconds(30);
126133
private static final Duration DEFAULT_CONNECTION_TIMEOUT = Duration.ofSeconds(2);
127134
private static final Duration DEFAULT_CONNECTION_ACQUIRE_TIMEOUT = Duration.ofSeconds(10);
128135
private static final Duration DEFAULT_CONNECTION_MAX_IDLE_TIMEOUT = Duration.ofSeconds(60);
129136
private static final Duration DEFAULT_CONNECTION_TIME_TO_LIVE = Duration.ZERO;
137+
private static final Duration DEFAULT_TLS_HANDSHAKE_TIMEOUT = Duration.ofSeconds(10);
130138
private static final Boolean DEFAULT_REAP_IDLE_CONNECTIONS = Boolean.TRUE;
131139
private static final int DEFAULT_MAX_CONNECTIONS = 50;
132140
private static final int DEFAULT_MAX_CONNECTION_ACQUIRES = 10_000;
@@ -154,6 +162,7 @@ public final class SdkHttpConfigurationOption<T> extends AttributeMap.Key<T> {
154162
.put(TCP_KEEPALIVE, DEFAULT_TCP_KEEPALIVE)
155163
.put(TLS_KEY_MANAGERS_PROVIDER, DEFAULT_TLS_KEY_MANAGERS_PROVIDER)
156164
.put(TLS_TRUST_MANAGERS_PROVIDER, DEFAULT_TLS_TRUST_MANAGERS_PROVIDER)
165+
.put(TLS_NEGOTIATION_TIMEOUT, DEFAULT_TLS_HANDSHAKE_TIMEOUT)
157166
.build();
158167

159168
private final String name;

http-clients/netty-nio-client/src/main/java/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.java

+23
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,18 @@ public interface Builder extends SdkAsyncHttpClient.Builder<NettyNioAsyncHttpCli
306306
*/
307307
Builder connectionMaxIdleTime(Duration maxIdleConnectionTimeout);
308308

309+
/**
310+
* Configure the maximum amount of time that a TLS handshake is allowed to take from the time the CLIENT HELLO
311+
* message is sent to the time the client and server have fully negotiated ciphers and exchanged keys.
312+
* @param tlsNegotiationTimeout the timeout duration
313+
*
314+
* <p>
315+
* By default, it's 10 seconds.
316+
*
317+
* @return this builder for method chaining.
318+
*/
319+
Builder tlsNegotiationTimeout(Duration tlsNegotiationTimeout);
320+
309321
/**
310322
* Configure whether the idle connections in the connection pool should be closed.
311323
* <p>
@@ -582,6 +594,17 @@ public void setUseIdleConnectionReaper(Boolean useIdleConnectionReaper) {
582594
useIdleConnectionReaper(useIdleConnectionReaper);
583595
}
584596

597+
@Override
598+
public Builder tlsNegotiationTimeout(Duration tlsNegotiationTimeout) {
599+
Validate.isPositive(tlsNegotiationTimeout, "tlsNegotiationTimeout");
600+
standardOptions.put(SdkHttpConfigurationOption.TLS_NEGOTIATION_TIMEOUT, tlsNegotiationTimeout);
601+
return this;
602+
}
603+
604+
public void setTlsNegotiationTimeout(Duration tlsNegotiationTimeout) {
605+
tlsNegotiationTimeout(tlsNegotiationTimeout);
606+
}
607+
585608
@Override
586609
public Builder eventLoopGroup(SdkEventLoopGroup eventLoopGroup) {
587610
this.eventLoopGroup = eventLoopGroup;

http-clients/netty-nio-client/src/main/java/software/amazon/awssdk/http/nio/netty/internal/AwaitCloseChannelPoolMap.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ protected SimpleChannelPoolAwareChannelPool newPool(URI key) {
138138
tcpChannelPool = new BetterSimpleChannelPool(bootstrap, NOOP_HANDLER);
139139
baseChannelPool = new Http1TunnelConnectionPool(bootstrap.config().group().next(), tcpChannelPool, sslContext,
140140
proxyAddress(key), proxyConfiguration.username(), proxyConfiguration.password(),
141-
key, pipelineInitializer);
141+
key, pipelineInitializer, configuration);
142142
} else {
143143
tcpChannelPool = new BetterSimpleChannelPool(bootstrap, pipelineInitializer);
144144
baseChannelPool = tcpChannelPool;

http-clients/netty-nio-client/src/main/java/software/amazon/awssdk/http/nio/netty/internal/ChannelPipelineInitializer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ public void channelCreated(Channel ch) {
9292
ChannelPipeline pipeline = ch.pipeline();
9393
if (sslCtx != null) {
9494

95-
SslHandler sslHandler = newSslHandler(sslCtx, ch.alloc(), poolKey.getHost(), poolKey.getPort());
95+
SslHandler sslHandler = newSslHandler(sslCtx, ch.alloc(), poolKey.getHost(), poolKey.getPort(),
96+
configuration.tlsHandshakeTimeout());
9697

9798
pipeline.addLast(sslHandler);
9899
pipeline.addLast(SslCloseCompletionEventHandler.getInstance());

http-clients/netty-nio-client/src/main/java/software/amazon/awssdk/http/nio/netty/internal/Http1TunnelConnectionPool.java

+13-8
Original file line numberDiff line numberDiff line change
@@ -54,27 +54,30 @@ public class Http1TunnelConnectionPool implements ChannelPool {
5454
private final URI remoteAddress;
5555
private final ChannelPoolHandler handler;
5656
private final InitHandlerSupplier initHandlerSupplier;
57+
private final NettyConfiguration nettyConfiguration;
5758

5859
public Http1TunnelConnectionPool(EventLoop eventLoop, ChannelPool delegate, SslContext sslContext,
5960
URI proxyAddress, String proxyUsername, String proxyPassword,
60-
URI remoteAddress, ChannelPoolHandler handler) {
61+
URI remoteAddress, ChannelPoolHandler handler, NettyConfiguration nettyConfiguration) {
6162
this(eventLoop, delegate, sslContext,
62-
proxyAddress, proxyUsername, proxyPassword, remoteAddress, handler,
63-
ProxyTunnelInitHandler::new);
63+
proxyAddress, proxyUsername, proxyPassword, remoteAddress, handler,
64+
ProxyTunnelInitHandler::new, nettyConfiguration);
6465
}
6566

6667
public Http1TunnelConnectionPool(EventLoop eventLoop, ChannelPool delegate, SslContext sslContext,
67-
URI proxyAddress, URI remoteAddress, ChannelPoolHandler handler) {
68+
URI proxyAddress, URI remoteAddress, ChannelPoolHandler handler,
69+
NettyConfiguration nettyConfiguration) {
6870
this(eventLoop, delegate, sslContext,
69-
proxyAddress, null, null, remoteAddress, handler,
70-
ProxyTunnelInitHandler::new);
71+
proxyAddress, null, null, remoteAddress, handler,
72+
ProxyTunnelInitHandler::new, nettyConfiguration);
7173

7274
}
7375

7476
@SdkTestInternalApi
7577
Http1TunnelConnectionPool(EventLoop eventLoop, ChannelPool delegate, SslContext sslContext,
7678
URI proxyAddress, String proxyUser, String proxyPassword, URI remoteAddress,
77-
ChannelPoolHandler handler, InitHandlerSupplier initHandlerSupplier) {
79+
ChannelPoolHandler handler, InitHandlerSupplier initHandlerSupplier,
80+
NettyConfiguration nettyConfiguration) {
7881
this.eventLoop = eventLoop;
7982
this.delegate = delegate;
8083
this.sslContext = sslContext;
@@ -84,6 +87,7 @@ public Http1TunnelConnectionPool(EventLoop eventLoop, ChannelPool delegate, SslC
8487
this.remoteAddress = remoteAddress;
8588
this.handler = handler;
8689
this.initHandlerSupplier = initHandlerSupplier;
90+
this.nettyConfiguration = nettyConfiguration;
8791
}
8892

8993
@Override
@@ -164,7 +168,8 @@ private SslHandler createSslHandlerIfNeeded(ByteBufAllocator alloc) {
164168
return null;
165169
}
166170

167-
return newSslHandler(sslContext, alloc, proxyAddress.getHost(), proxyAddress.getPort());
171+
return newSslHandler(sslContext, alloc, proxyAddress.getHost(), proxyAddress.getPort(),
172+
nettyConfiguration.tlsHandshakeTimeout());
168173
}
169174

170175
private static boolean isTunnelEstablished(Channel ch) {

http-clients/netty-nio-client/src/main/java/software/amazon/awssdk/http/nio/netty/internal/NettyConfiguration.java

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static software.amazon.awssdk.http.SdkHttpConfigurationOption.TRUST_ALL_CERTIFICATES;
2424
import static software.amazon.awssdk.utils.NumericUtils.saturatedCast;
2525

26+
import java.time.Duration;
2627
import software.amazon.awssdk.annotations.SdkInternalApi;
2728
import software.amazon.awssdk.http.SdkHttpConfigurationOption;
2829
import software.amazon.awssdk.http.TlsKeyManagersProvider;
@@ -102,4 +103,8 @@ public boolean trustAllCertificates() {
102103
public boolean tcpKeepAlive() {
103104
return configuration.get(TCP_KEEPALIVE);
104105
}
106+
107+
public Duration tlsHandshakeTimeout() {
108+
return configuration.get(SdkHttpConfigurationOption.TLS_NEGOTIATION_TIMEOUT);
109+
}
105110
}

http-clients/netty-nio-client/src/main/java/software/amazon/awssdk/http/nio/netty/internal/utils/NettyUtils.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import io.netty.util.concurrent.GenericFutureListener;
2626
import io.netty.util.concurrent.Promise;
2727
import io.netty.util.concurrent.SucceededFuture;
28+
import java.time.Duration;
2829
import java.util.concurrent.CompletableFuture;
30+
import java.util.concurrent.TimeUnit;
2931
import java.util.function.BiConsumer;
3032
import java.util.function.Function;
3133
import javax.net.ssl.SSLEngine;
@@ -196,10 +198,12 @@ public static <T> AttributeKey<T> getOrCreateAttributeKey(String attr) {
196198
/**
197199
* @return a new {@link SslHandler} with ssl engine configured
198200
*/
199-
public static SslHandler newSslHandler(SslContext sslContext, ByteBufAllocator alloc, String peerHost, int peerPort) {
201+
public static SslHandler newSslHandler(SslContext sslContext, ByteBufAllocator alloc, String peerHost, int peerPort,
202+
Duration handshakeTimeout) {
200203
// Need to provide host and port to enable SNI
201204
// https://github.com/netty/netty/issues/3801#issuecomment-104274440
202205
SslHandler sslHandler = sslContext.newHandler(alloc, peerHost, peerPort);
206+
sslHandler.setHandshakeTimeout(handshakeTimeout.toMillis(), TimeUnit.MILLISECONDS);
203207
configureSslEngine(sslHandler.engine());
204208
return sslHandler;
205209
}

http-clients/netty-nio-client/src/test/java/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClientWireMockTest.java

+15
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,21 @@ public void createNettyClient_ReadWriteTimeoutCanBeZero() throws Exception {
681681
customClient.close();
682682
}
683683

684+
@Test
685+
public void createNettyClient_tlsNegotiationTimeoutNotPositive_shouldThrowException() throws Exception {
686+
assertThatThrownBy(() -> NettyNioAsyncHttpClient.builder()
687+
.tlsNegotiationTimeout(Duration.ZERO)
688+
.build())
689+
.isInstanceOf(IllegalArgumentException.class)
690+
.hasMessageContaining("must be positive");
691+
assertThatThrownBy(() -> NettyNioAsyncHttpClient.builder()
692+
.tlsNegotiationTimeout(Duration.ofSeconds(-1))
693+
.build())
694+
.isInstanceOf(IllegalArgumentException.class)
695+
.hasMessageContaining("must be positive");
696+
}
697+
698+
684699
@Test
685700
public void metricsAreCollectedWhenMaxPendingConnectionAcquisitionsAreExceeded() throws Exception {
686701
SdkAsyncHttpClient customClient = NettyNioAsyncHttpClient.builder()

http-clients/netty-nio-client/src/test/java/software/amazon/awssdk/http/nio/netty/internal/Http1TunnelConnectionPoolTest.java

+16-13
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.mockito.Mockito.verify;
2626
import static org.mockito.Mockito.when;
2727
import static software.amazon.awssdk.http.nio.netty.internal.Http1TunnelConnectionPool.TUNNEL_ESTABLISHED_KEY;
28+
2829
import io.netty.buffer.ByteBufAllocator;
2930
import io.netty.channel.Channel;
3031
import io.netty.channel.ChannelHandler;
@@ -43,7 +44,6 @@
4344
import java.io.IOException;
4445
import java.net.URI;
4546
import java.util.List;
46-
import java.util.Map;
4747
import java.util.concurrent.CountDownLatch;
4848
import javax.net.ssl.SSLEngine;
4949
import javax.net.ssl.SSLParameters;
@@ -55,7 +55,7 @@
5555
import org.mockito.ArgumentCaptor;
5656
import org.mockito.Mock;
5757
import org.mockito.runners.MockitoJUnitRunner;
58-
import org.testng.collections.Maps;
58+
import software.amazon.awssdk.http.SdkHttpConfigurationOption;
5959

6060
/**
6161
* Unit tests for {@link Http1TunnelConnectionPool}.
@@ -95,6 +95,8 @@ public class Http1TunnelConnectionPoolTest {
9595
@Mock
9696
public ChannelId mockId;
9797

98+
public NettyConfiguration configuration;
99+
98100
@Before
99101
public void methodSetup() {
100102
Future<Channel> channelFuture = GROUP.next().newSucceededFuture(mockChannel);
@@ -106,6 +108,7 @@ public void methodSetup() {
106108
when(mockChannel.attr(eq(TUNNEL_ESTABLISHED_KEY))).thenReturn(mockAttr);
107109
when(mockChannel.id()).thenReturn(mockId);
108110
when(mockChannel.pipeline()).thenReturn(mockPipeline);
111+
configuration = new NettyConfiguration(SdkHttpConfigurationOption.GLOBAL_HTTP_DEFAULTS);
109112
}
110113

111114
@AfterClass
@@ -116,7 +119,7 @@ public static void teardown() {
116119
@Test
117120
public void tunnelAlreadyEstablished_doesNotAddInitHandler() {
118121
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
119-
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler);
122+
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler, configuration);
120123

121124
when(mockAttr.get()).thenReturn(true);
122125

@@ -128,7 +131,7 @@ public void tunnelAlreadyEstablished_doesNotAddInitHandler() {
128131
@Test(timeout = 1000)
129132
public void tunnelNotEstablished_addsInitHandler() throws InterruptedException {
130133
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
131-
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler);
134+
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler, configuration);
132135

133136
when(mockAttr.get()).thenReturn(false);
134137

@@ -150,7 +153,7 @@ public void tunnelInitFails_acquireFutureFails() {
150153
};
151154

152155
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
153-
HTTP_PROXY_ADDRESS,null, null, REMOTE_ADDRESS, mockHandler, supplier);
156+
HTTP_PROXY_ADDRESS,null, null, REMOTE_ADDRESS, mockHandler, supplier, configuration);
154157

155158
Future<Channel> acquireFuture = tunnelPool.acquire();
156159

@@ -165,7 +168,7 @@ public void tunnelInitSucceeds_acquireFutureSucceeds() {
165168
};
166169

167170
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
168-
HTTP_PROXY_ADDRESS, null, null, REMOTE_ADDRESS, mockHandler, supplier);
171+
HTTP_PROXY_ADDRESS, null, null, REMOTE_ADDRESS, mockHandler, supplier, configuration);
169172

170173
Future<Channel> acquireFuture = tunnelPool.acquire();
171174

@@ -175,7 +178,7 @@ public void tunnelInitSucceeds_acquireFutureSucceeds() {
175178
@Test
176179
public void acquireFromDelegatePoolFails_failsFuture() {
177180
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
178-
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler);
181+
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler, configuration);
179182

180183
when(delegatePool.acquire(any(Promise.class))).thenReturn(GROUP.next().newFailedFuture(new IOException("boom")));
181184

@@ -198,7 +201,7 @@ public void sslContextProvided_andProxyUsingHttps_addsSslHandler() {
198201
};
199202

200203
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, mockSslCtx,
201-
HTTPS_PROXY_ADDRESS, null, null, REMOTE_ADDRESS, mockHandler, supplier);
204+
HTTPS_PROXY_ADDRESS, null, null, REMOTE_ADDRESS, mockHandler, supplier, configuration);
202205

203206
tunnelPool.acquire().awaitUninterruptibly();
204207

@@ -219,7 +222,7 @@ public void sslContextProvided_andProxyNotUsingHttps_doesNotAddSslHandler() {
219222
};
220223

221224
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, mockSslCtx,
222-
HTTP_PROXY_ADDRESS, null, null, REMOTE_ADDRESS, mockHandler, supplier);
225+
HTTP_PROXY_ADDRESS, null, null, REMOTE_ADDRESS, mockHandler, supplier, configuration);
223226

224227
tunnelPool.acquire().awaitUninterruptibly();
225228

@@ -232,15 +235,15 @@ public void sslContextProvided_andProxyNotUsingHttps_doesNotAddSslHandler() {
232235
@Test
233236
public void release_releasedToDelegatePool() {
234237
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
235-
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler);
238+
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler, configuration);
236239
tunnelPool.release(mockChannel);
237240
verify(delegatePool).release(eq(mockChannel), any(Promise.class));
238241
}
239242

240243
@Test
241244
public void release_withGivenPromise_releasedToDelegatePool() {
242245
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
243-
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler);
246+
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler, configuration);
244247
Promise mockPromise = mock(Promise.class);
245248
tunnelPool.release(mockChannel, mockPromise);
246249
verify(delegatePool).release(eq(mockChannel), eq(mockPromise));
@@ -249,7 +252,7 @@ public void release_withGivenPromise_releasedToDelegatePool() {
249252
@Test
250253
public void close_closesDelegatePool() {
251254
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
252-
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler);
255+
HTTP_PROXY_ADDRESS, REMOTE_ADDRESS, mockHandler, configuration);
253256
tunnelPool.close();
254257
verify(delegatePool).close();
255258
}
@@ -266,7 +269,7 @@ public void proxyAuthProvided_addInitHandler_withAuth(){
266269
};
267270

268271
Http1TunnelConnectionPool tunnelPool = new Http1TunnelConnectionPool(GROUP.next(), delegatePool, null,
269-
HTTP_PROXY_ADDRESS, PROXY_USER, PROXY_PASSWORD, REMOTE_ADDRESS, mockHandler, supplier);
272+
HTTP_PROXY_ADDRESS, PROXY_USER, PROXY_PASSWORD, REMOTE_ADDRESS, mockHandler, supplier, configuration);
270273

271274
tunnelPool.acquire().awaitUninterruptibly();
272275

http-clients/netty-nio-client/src/test/java/software/amazon/awssdk/http/nio/netty/internal/utils/NettyUtilsTest.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.netty.handler.ssl.SslHandler;
2929
import io.netty.util.AttributeKey;
3030
import io.netty.util.concurrent.EventExecutor;
31+
import java.time.Duration;
3132
import javax.net.ssl.SSLEngine;
3233
import org.junit.Test;
3334
import software.amazon.awssdk.http.nio.netty.internal.MockChannel;
@@ -46,7 +47,10 @@ public void newSslHandler_sslEngineShouldBeConfigured() throws Exception {
4647
Channel channel = null;
4748
try {
4849
channel = new MockChannel();
49-
SslHandler sslHandler = NettyUtils.newSslHandler(sslContext, channel.alloc(), "localhost", 80);
50+
SslHandler sslHandler = NettyUtils.newSslHandler(sslContext, channel.alloc(), "localhost", 80,
51+
Duration.ofMillis(1000));
52+
53+
assertThat(sslHandler.getHandshakeTimeoutMillis()).isEqualTo(1000);
5054
SSLEngine engine = sslHandler.engine();
5155
assertThat(engine.getSSLParameters().getEndpointIdentificationAlgorithm()).isEqualTo("HTTPS");
5256
} finally {

http-clients/url-connection-client/src/main/java/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.java

-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ private HttpURLConnection createDefaultConnection(URI uri, SSLSocketFactory sock
152152
if (options.get(SdkHttpConfigurationOption.TRUST_ALL_CERTIFICATES)) {
153153
httpsConnection.setHostnameVerifier(NoOpHostNameVerifier.INSTANCE);
154154
}
155-
156155
httpsConnection.setSSLSocketFactory(socketFactory);
157156
}
158157

0 commit comments

Comments
 (0)