Skip to content

Commit ed8161a

Browse files
committed
feat: Add SSL context loading
Signed-off-by: Rui Vieira <[email protected]>
1 parent 549b450 commit ed8161a

File tree

1 file changed

+35
-6
lines changed

1 file changed

+35
-6
lines changed

src/main/java/com/ibm/watson/modelmesh/ModelMesh.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,16 @@
101101

102102
import javax.annotation.concurrent.GuardedBy;
103103
import javax.net.ssl.SSLContext;
104-
import java.io.File;
105-
import java.io.IOException;
106-
import java.io.InterruptedIOException;
107-
import java.io.UncheckedIOException;
104+
import javax.net.ssl.TrustManagerFactory;
105+
import java.io.*;
108106
import java.lang.management.ManagementFactory;
109107
import java.lang.management.MemoryMXBean;
110108
import java.lang.management.MemoryUsage;
111109
import java.lang.reflect.InvocationTargetException;
112110
import java.lang.reflect.Method;
113111
import java.net.URI;
114112
import java.nio.channels.ClosedByInterruptException;
113+
import java.security.KeyStore;
115114
import java.security.NoSuchAlgorithmException;
116115
import java.text.ParseException;
117116
import java.text.SimpleDateFormat;
@@ -432,6 +431,34 @@ public abstract class ModelMesh extends ThriftService
432431
}
433432
}
434433

434+
private static final String SSL_TRUSTSTORE_PATH_PROPERTY = "watson.ssl.truststore.path";
435+
private static final String SSL_TRUSTSTORE_PASSWORD_PROPERTY = "watson.ssl.truststore.password";
436+
437+
private static SSLContext sslContext = null;
438+
439+
private static SSLContext loadSSLContext() throws Exception {
440+
if (sslContext == null) {
441+
final String trustStorePath = System.getProperty(SSL_TRUSTSTORE_PATH_PROPERTY);
442+
final String trustStorePassword = System.getProperty(SSL_TRUSTSTORE_PASSWORD_PROPERTY);
443+
444+
if (trustStorePath == null || trustStorePassword == null) {
445+
throw new IllegalArgumentException("Truststore settings not found in system properties");
446+
}
447+
448+
final KeyStore trustStore = KeyStore.getInstance("JKS");
449+
try (FileInputStream trustStoreStream = new FileInputStream(trustStorePath)) {
450+
trustStore.load(trustStoreStream, trustStorePassword.toCharArray());
451+
}
452+
453+
final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
454+
trustManagerFactory.init(trustStore);
455+
456+
sslContext = SSLContext.getInstance("TLS");
457+
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
458+
}
459+
return sslContext;
460+
}
461+
435462
private PayloadProcessor initPayloadProcessor() {
436463
String payloadProcessorsDefinitions = getStringParameter(MM_PAYLOAD_PROCESSORS, null);
437464
logger.info("Parsing PayloadProcessor definition '{}'", payloadProcessorsDefinitions);
@@ -445,14 +472,16 @@ private PayloadProcessor initPayloadProcessor() {
445472
String modelId = uri.getQuery();
446473
String method = uri.getFragment();
447474
if ("http".equals(processorName)) {
475+
logger.info("Initializing HTTP payload processor");
448476
processor = new RemotePayloadProcessor(uri);
449477
} else if ("https".equals(processorName)) {
450478
SSLContext sslContext;
451479
try {
452-
sslContext = SSLContext.getDefault();
453-
} catch (NoSuchAlgorithmException missingAlgorithmException) {
480+
sslContext = loadSSLContext();
481+
} catch (Exception missingAlgorithmException) {
454482
throw new UncheckedIOException(new IOException(missingAlgorithmException));
455483
}
484+
logger.info("Initializing HTTPS payload processor");
456485
processor = new RemotePayloadProcessor(uri, sslContext, sslContext.getDefaultSSLParameters());
457486
} else if ("logger".equals(processorName)) {
458487
processor = new LoggingPayloadProcessor();

0 commit comments

Comments
 (0)