Skip to content

Commit a98b31b

Browse files
authored
Use ALPN for TDS8 connection establishment (#1660)
Follows-up on #1643 Signed-off-by: Thomas Segismont <tsegismont@gmail.com>
1 parent ec53078 commit a98b31b

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionFactory.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,15 @@
2727
import io.vertx.sqlclient.impl.ConnectionFactoryBase;
2828
import io.vertx.sqlclient.spi.connection.Connection;
2929

30+
import java.util.List;
3031
import java.util.Map;
3132

3233
import static io.vertx.mssqlclient.impl.codec.EncryptionLevel.*;
3334

3435
public class MSSQLConnectionFactory extends ConnectionFactoryBase<MSSQLConnectOptions> {
3536

37+
private static final List<String> TDS_PROTOCOLS = List.of("tds/8.0");
38+
3639
private final ClientSslContextManager sslContextManager;
3740

3841
public MSSQLConnectionFactory(VertxInternal vertx) {
@@ -64,18 +67,15 @@ private Future<Connection> connectOrRedirect(MSSQLConnectOptions options, Contex
6467
private Future<Connection> connectWithTds8(MSSQLConnectOptions options, ContextInternal context, int redirections) {
6568
SocketAddress server = options.getSocketAddress();
6669

67-
ClientSSLOptions sslOptions;
68-
if (options.getSslOptions() == null) {
69-
sslOptions = new ClientSSLOptions();
70-
} else {
71-
sslOptions = new ClientSSLOptions(options.getSslOptions());
72-
}
73-
70+
ClientSSLOptions sslOptions = copyClientSSLOptions(options.getSslOptions());
7471
if (sslOptions.isTrustAll()) {
7572
return context.failedFuture("Strict encryption mode requires proper certificate validation. Configure SSL options with valid certificates.");
7673
}
7774

78-
sslOptions.setHostnameVerificationAlgorithm("");
75+
if (sslOptions.getHostnameVerificationAlgorithm() == null) {
76+
sslOptions.setHostnameVerificationAlgorithm("");
77+
}
78+
sslOptions.setUseAlpn(true).setApplicationLayerProtocols(TDS_PROTOCOLS);
7979

8080
ConnectOptions connectOpts = new ConnectOptions()
8181
.setRemoteAddress(server)
@@ -89,6 +89,10 @@ private Future<Connection> connectWithTds8(MSSQLConnectOptions options, ContextI
8989
.compose(connBase -> handleRedirectionToAlternateServer(connBase, options, context, redirections));
9090
}
9191

92+
private ClientSSLOptions copyClientSSLOptions(ClientSSLOptions sslOptions) {
93+
return sslOptions == null ? new ClientSSLOptions() : sslOptions.copy();
94+
}
95+
9296
private Future<Connection> connectWithTds7x(MSSQLConnectOptions options, ContextInternal context, int redirections) {
9397
SocketAddress server = options.getSocketAddress();
9498
boolean clientSslConfig = options.isSsl();

0 commit comments

Comments
 (0)