@@ -130,6 +130,8 @@ static HttpTransportOptions getHttpTransportOptions(
130130 Map <String , String > proxyProperties ,
131131 String sslTrustStorePath ,
132132 String sslTrustStorePassword ,
133+ String sslTrustStoreType ,
134+ String sslTrustStoreProvider ,
133135 Integer connectTimeout ,
134136 Integer readTimeout ,
135137 String callerClassName ) {
@@ -143,7 +145,12 @@ static HttpTransportOptions getHttpTransportOptions(
143145 if (hasProxyOrSsl ) {
144146 httpTransportOptionsBuilder .setHttpTransportFactory (
145147 getHttpTransportFactory (
146- proxyProperties , sslTrustStorePath , sslTrustStorePassword , callerClassName ));
148+ proxyProperties ,
149+ sslTrustStorePath ,
150+ sslTrustStorePassword ,
151+ sslTrustStoreType ,
152+ sslTrustStoreProvider ,
153+ callerClassName ));
147154 } else {
148155 httpTransportOptionsBuilder .setHttpTransportFactory (() -> DEFAULT_TRANSPORT );
149156 }
@@ -162,6 +169,8 @@ private static HttpTransportFactory getHttpTransportFactory(
162169 Map <String , String > proxyProperties ,
163170 String sslTrustStorePath ,
164171 String sslTrustStorePassword ,
172+ String sslTrustStoreType ,
173+ String sslTrustStoreProvider ,
165174 String callerClassName ) {
166175 LOG .finest ("++enter++\t " + callerClassName );
167176 HttpClientBuilder httpClientBuilder = HttpClients .custom ();
@@ -182,7 +191,7 @@ private static HttpTransportFactory getHttpTransportFactory(
182191
183192 if (sslTrustStorePath != null ) {
184193 try (FileInputStream trustStoreStream = new FileInputStream (sslTrustStorePath )) {
185- KeyStore trustStore = KeyStore . getInstance ( KeyStore . getDefaultType () );
194+ KeyStore trustStore = loadKeyStore ( sslTrustStoreType , sslTrustStoreProvider );
186195 char [] trustStorePasswordChars =
187196 sslTrustStorePassword != null ? sslTrustStorePassword .toCharArray () : null ;
188197 trustStore .load (trustStoreStream , trustStorePasswordChars );
@@ -243,6 +252,8 @@ static TransportChannelProvider getTransportChannelProvider(
243252 Map <String , String > proxyProperties ,
244253 String sslTrustStorePath ,
245254 String sslTrustStorePassword ,
255+ String sslTrustStoreType ,
256+ String sslTrustStoreProvider ,
246257 String callerClassName ) {
247258 LOG .finest ("++enter++\t " + callerClassName );
248259 boolean hasProxy = proxyProperties .containsKey (BigQueryJdbcUrlUtility .PROXY_HOST_PROPERTY_NAME );
@@ -271,7 +282,7 @@ public ProxiedSocketAddress proxyFor(SocketAddress socketAddress) {
271282 instanceof io .grpc .netty .shaded .io .grpc .netty .NettyChannelBuilder ) {
272283 try (FileInputStream trustStoreStream =
273284 new FileInputStream (sslTrustStorePath )) {
274- KeyStore trustStore = KeyStore . getInstance ( KeyStore . getDefaultType () );
285+ KeyStore trustStore = loadKeyStore ( sslTrustStoreType , sslTrustStoreProvider );
275286 char [] trustStorePasswordChars =
276287 sslTrustStorePassword != null
277288 ? sslTrustStorePassword .toCharArray ()
@@ -300,6 +311,15 @@ public ProxiedSocketAddress proxyFor(SocketAddress socketAddress) {
300311 return transportChannelProvider ;
301312 }
302313
314+ private static KeyStore loadKeyStore (String type , String provider )
315+ throws GeneralSecurityException {
316+ String resolvedType =
317+ (type != null && !type .trim ().isEmpty ()) ? type .trim () : KeyStore .getDefaultType ();
318+ return (provider != null && !provider .trim ().isEmpty ())
319+ ? KeyStore .getInstance (resolvedType , provider .trim ())
320+ : KeyStore .getInstance (resolvedType );
321+ }
322+
303323 private static HttpConnectProxiedSocketAddress getHttpConnectProxiedSocketAddress (
304324 InetSocketAddress socketAddress , Map <String , String > proxyProperties ) {
305325 String proxyHost = proxyProperties .get (BigQueryJdbcUrlUtility .PROXY_HOST_PROPERTY_NAME );
0 commit comments