|
92 | 92 | import io.split.telemetry.synchronizer.TelemetrySynchronizer; |
93 | 93 |
|
94 | 94 | import org.apache.hc.client5.http.auth.AuthScope; |
| 95 | +import org.apache.hc.client5.http.auth.BearerToken; |
95 | 96 | import org.apache.hc.client5.http.auth.Credentials; |
96 | 97 | import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; |
97 | 98 | import org.apache.hc.client5.http.config.RequestConfig; |
|
113 | 114 | import org.slf4j.LoggerFactory; |
114 | 115 | import pluggable.CustomStorageWrapper; |
115 | 116 |
|
| 117 | +import javax.net.ssl.SSLContext; |
116 | 118 | import java.io.IOException; |
117 | 119 | import java.io.InputStream; |
118 | 120 | import java.net.InetAddress; |
119 | 121 | import java.net.URI; |
120 | 122 | import java.net.URISyntaxException; |
| 123 | +import java.nio.file.Paths; |
| 124 | +import java.security.KeyStore; |
121 | 125 | import java.util.concurrent.ExecutorService; |
122 | 126 | import java.util.stream.Collectors; |
123 | 127 | import java.util.HashSet; |
@@ -518,8 +522,28 @@ public boolean isDestroyed() { |
518 | 522 | protected static SplitHttpClient buildSplitHttpClient(String apiToken, SplitClientConfig config, |
519 | 523 | SDKMetadata sdkMetadata, RequestDecorator requestDecorator) |
520 | 524 | throws URISyntaxException { |
| 525 | + |
| 526 | + SSLContext sslContext; |
| 527 | + if (config.proxyMTLSAuth() != null) { |
| 528 | + _log.debug("Proxy setup using mTLS"); |
| 529 | + try { |
| 530 | + KeyStore keyStore = KeyStore.getInstance("PKCS12"); |
| 531 | + InputStream keystoreStream = java.nio.file.Files.newInputStream(Paths.get(config.proxyMTLSAuth().getP12File())); |
| 532 | + keyStore.load(keystoreStream, config.proxyMTLSAuth().getP12FilePassKey().toCharArray()); |
| 533 | + sslContext = SSLContexts.custom() |
| 534 | + .loadKeyMaterial(keyStore, config.proxyMTLSAuth().getP12FilePassKey().toCharArray()) |
| 535 | + .build(); |
| 536 | + } catch (Exception e) { |
| 537 | + _log.error("Exception caught while processing p12 file for Proxy mTLS auth: ", e); |
| 538 | + _log.warn("Ignoring p12 mTLS config and switching to default context"); |
| 539 | + sslContext = SSLContexts.createSystemDefault(); |
| 540 | + } |
| 541 | + } else { |
| 542 | + sslContext = SSLContexts.createSystemDefault(); |
| 543 | + } |
| 544 | + |
521 | 545 | SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create() |
522 | | - .setSslContext(SSLContexts.createSystemDefault()) |
| 546 | + .setSslContext(sslContext) |
523 | 547 | .setTlsVersions(TLS.V_1_1, TLS.V_1_2) |
524 | 548 | .build(); |
525 | 549 |
|
@@ -604,6 +628,15 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, |
604 | 628 | httpClientbuilder.setDefaultCredentialsProvider(credsProvider); |
605 | 629 | } |
606 | 630 |
|
| 631 | + if (config.proxyToken() != null) { |
| 632 | + _log.debug("Proxy setup using token"); |
| 633 | + BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); |
| 634 | + AuthScope siteScope = new AuthScope(config.proxy().getHostName(), config.proxy().getPort()); |
| 635 | + Credentials siteCreds = new BearerToken(config.proxyToken()); |
| 636 | + credsProvider.setCredentials(siteScope, siteCreds); |
| 637 | + httpClientbuilder.setDefaultCredentialsProvider(credsProvider); |
| 638 | + } |
| 639 | + |
607 | 640 | return httpClientbuilder; |
608 | 641 | } |
609 | 642 |
|
|
0 commit comments