Skip to content

Commit 0771c22

Browse files
committed
Remove HttpClientConfig#forceSNI.
Motivation: HttpClientConfig#forceSNI has been introduced as continuation of HttpClientOptions#forceSNI. This options goes against the SNI hostname validation and is actually not supported by the QUIC ssl engine. It can be worked around with specific Vert.x resolver hosts configuration. Changes: Remove HttpClientConfig#forceSNI, keep it working on HttpClientOptions.
1 parent dd5ca8e commit 0771c22

File tree

6 files changed

+22
-33
lines changed

6 files changed

+22
-33
lines changed

vertx-core/src/main/java/io/vertx/core/http/HttpClientConfig.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ private static QuicClientConfig defaultQuicConfig() {
7474
private String defaultHost;
7575
private int defaultPort;
7676
private int maxRedirects;
77-
private boolean forceSni;
7877
private ObservabilityConfig observabilityConfig;
7978
private boolean shared;
8079
private String name;
@@ -93,7 +92,6 @@ public HttpClientConfig() {
9392
this.defaultHost = HttpClientOptions.DEFAULT_DEFAULT_HOST;
9493
this.defaultPort = HttpClientOptions.DEFAULT_DEFAULT_PORT;
9594
this.maxRedirects = HttpClientOptions.DEFAULT_MAX_REDIRECTS;
96-
this.forceSni = HttpClientOptions.DEFAULT_FORCE_SNI;
9795
this.observabilityConfig = null;
9896
this.shared = HttpClientOptions.DEFAULT_SHARED;
9997
this.name = HttpClientOptions.DEFAULT_NAME;
@@ -113,7 +111,6 @@ public HttpClientConfig(HttpClientConfig other) {
113111
this.defaultHost = other.defaultHost;
114112
this.defaultPort = other.defaultPort;
115113
this.maxRedirects = other.maxRedirects;
116-
this.forceSni = other.forceSni;
117114
this.observabilityConfig = other.observabilityConfig != null ? new ObservabilityConfig(other.observabilityConfig) : null;
118115
this.shared = other.shared;
119116
this.name = other.name;
@@ -141,7 +138,6 @@ public HttpClientConfig(HttpClientOptions options) {
141138
this.defaultHost = options.getDefaultHost();
142139
this.defaultPort = options.getDefaultPort();
143140
this.maxRedirects = options.getMaxRedirects();
144-
this.forceSni = options.isForceSni();
145141
this.observabilityConfig = observabilityConfig;
146142
this.shared = options.isShared();
147143
this.name = options.getName();
@@ -450,25 +446,6 @@ public HttpClientConfig setMaxRedirects(int maxRedirects) {
450446
return this;
451447
}
452448

453-
/**
454-
* @return whether the client should always use SNI on TLS/SSL connections
455-
*/
456-
public boolean isForceSni() {
457-
return forceSni;
458-
}
459-
460-
/**
461-
* By default, the server name is only sent for Fully Qualified Domain Name (FQDN), setting
462-
* this property to {@code true} forces the server name to be always sent.
463-
*
464-
* @param forceSni {@code true} when the client should always use SNI on TLS/SSL connections
465-
* @return a reference to this, so the API can be used fluently
466-
*/
467-
public HttpClientConfig setForceSni(boolean forceSni) {
468-
this.forceSni = forceSni;
469-
return this;
470-
}
471-
472449
/**
473450
* @return the client observability config.
474451
*/

vertx-core/src/main/java/io/vertx/core/http/impl/HttpClientBuilderInternal.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public final class HttpClientBuilderInternal implements HttpClientBuilder {
3939
private HttpClientOptions clientOptions; // To be removed
4040
private ClientSSLOptions sslOptions;
4141
private SSLEngineOptions sslEngineOptions;
42+
private boolean forceSNI;
4243
private PoolOptions poolOptions;
4344
private Handler<HttpConnection> connectHandler;
4445
private Function<HttpClientResponse, Future<RequestOptions>> redirectHandler;
@@ -53,15 +54,25 @@ public HttpClientBuilderInternal(VertxInternal vertx) {
5354

5455
public HttpClientBuilderInternal with(HttpClientConfig config) {
5556
this.clientConfig = config;
57+
this.forceSNI = false;
5658
return this;
5759
}
5860

5961
@Override
6062
public HttpClientBuilderInternal with(HttpClientOptions options) {
61-
this.clientConfig = new HttpClientConfig(options);
62-
this.sslOptions = options.getSslOptions();
63-
this.sslEngineOptions = options.getSslEngineOptions();
64-
this.clientOptions = options;
63+
if (options != null) {
64+
this.clientConfig = new HttpClientConfig(options);
65+
this.sslOptions = options.getSslOptions();
66+
this.sslEngineOptions = options.getSslEngineOptions();
67+
this.clientOptions = options;
68+
this.forceSNI = options.isForceSni();
69+
} else {
70+
this.clientConfig = null;
71+
this.sslOptions = null;
72+
this.sslEngineOptions = null;
73+
this.clientOptions = null;
74+
this.forceSNI = false;
75+
}
6576
return this;
6677
}
6778

@@ -277,7 +288,7 @@ public HttpClientInternal build() {
277288
co.isDecompressionEnabled(),
278289
logConfig != null && logConfig.isEnabled(),
279290
logConfig != null ? logConfig.getDataFormat() : null,
280-
co.isForceSni(),
291+
forceSNI,
281292
supportedVersions.contains(HttpVersion.HTTP_1_1) || supportedVersions.contains(HttpVersion.HTTP_1_0) ? (co.getHttp1Config() != null ? co.getHttp1Config() : new Http1ClientConfig()) : null,
282293
supportedVersions.contains(HttpVersion.HTTP_2) ? (co.getHttp2Config() != null ? co.getHttp2Config() : new Http2ClientConfig()) : null,
283294
co.getTcpConfig().getIdleTimeout(),

vertx-core/src/main/java/io/vertx/core/http/impl/quic/QuicHttpClientTransport.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public class QuicHttpClientTransport implements HttpClientTransport {
4343
private final Http3Settings localSettings;
4444
private final Http3FrameLogger frameLogger;
4545
private final long maxConcurrency;
46-
private final boolean forceSni;
4746

4847
public QuicHttpClientTransport(VertxInternal vertx, HttpClientConfig config) {
4948

@@ -77,7 +76,6 @@ public QuicHttpClientTransport(VertxInternal vertx, HttpClientConfig config) {
7776
this.localSettings = localSettings;
7877
this.client = client;
7978
this.frameLogger = logEnabled ? new Http3FrameLogger(InternalLogLevel.DEBUG) : null;
80-
this.forceSni = config.isForceSni();
8179
}
8280

8381
public QuicClientImpl client() {

vertx-core/src/main/java/io/vertx/core/http/impl/tcp/TcpHttpClientTransport.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,15 @@ public class TcpHttpClientTransport implements HttpClientTransport {
6565

6666
public static TcpHttpClientTransport create(NetClientInternal netClient,
6767
HttpClientConfig config,
68+
boolean forceSNI,
6869
HttpClientMetrics httpMetrics) {
6970
ObservabilityConfig observabilityConfig = config.getObservabilityConfig();
7071
return new TcpHttpClientTransport(netClient,
7172
observabilityConfig != null ? observabilityConfig.getTracingPolicy() : null,
7273
config.isDecompressionEnabled(),
7374
config.getTcpConfig().getLogConfig() != null && config.getTcpConfig().getLogConfig().isEnabled(),
7475
config.getTcpConfig().getLogConfig() != null ? config.getTcpConfig().getLogConfig().getDataFormat() : null,
75-
config.isForceSni(),
76+
forceSNI,
7677
config.getHttp1Config(),
7778
config.getHttp2Config(),
7879
config.getTcpConfig().getIdleTimeout(),

vertx-core/src/main/java/io/vertx/core/impl/VertxImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ private WebSocketClientImpl createWebSocketClientImpl(WebSocketClientOptions opt
454454
.protocol("http")
455455
.sslOptions(options.getSslOptions())
456456
.build();
457-
TcpHttpClientTransport channelConnector = TcpHttpClientTransport.create(tcpClient, config, httpMetrics);
457+
TcpHttpClientTransport channelConnector = TcpHttpClientTransport.create(tcpClient, config, false, httpMetrics);
458458
return new WebSocketClientImpl(this, o, options, channelConnector, httpMetrics);
459459
}
460460

vertx-core/src/test/java/io/vertx/tests/http/http3/Http3Config.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ public HttpClientConfig setVerifyHost(boolean verify) {
155155
}
156156
@Override
157157
public HttpClientConfig setForceSni(boolean forceSni) {
158-
config.setForceSni(forceSni);
158+
if (forceSni) {
159+
throw new UnsupportedOperationException();
160+
}
159161
return this;
160162
}
161163
@Override

0 commit comments

Comments
 (0)