2727import io .vertx .sqlclient .impl .ConnectionFactoryBase ;
2828import io .vertx .sqlclient .spi .connection .Connection ;
2929
30+ import java .util .List ;
3031import java .util .Map ;
3132
3233import static io .vertx .mssqlclient .impl .codec .EncryptionLevel .*;
3334
3435public 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