import java.io.FileInputStream;
import java.net.URI;
+import java.nio.file.Paths;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.util.Optional;
-
import javax.net.ssl.SSLContext;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
public abstract class RestClientSSL extends RestClient {
-
- private static final String TRUE = "true";
- public static final String SSL_KEY_STORE_KEY = "javax.net.ssl.keyStore";
- public static final String SSL_KEY_STORE_PASSWORD_KEY = "javax.net.ssl.keyStorePassword";
- public static final String MSO_LOAD_SSL_CLIENT_KEYSTORE_KEY = "mso.load.ssl.client.keystore";
-
- protected RestClientSSL(RestProperties props, Optional<URI> path) {
- super(props, path);
- }
+ private static final String TRUE = "true";
+ private static final String SSL_KEY_STORE_KEY = "javax.net.ssl.keyStore";
+ private static final String MSO_LOAD_SSL_CLIENT_KEYSTORE_KEY = "mso.load.ssl.client.keystore";
+
+
+ protected RestClientSSL(RestProperties props, Optional<URI> path) {
+ super(props, path);
+ }
+
+ protected RestClientSSL(RestProperties props, Optional<URI> path, String accept, String contentType) {
+ super(props, path, accept, contentType);
+ }
+
+ @Override
+ protected Client getClient() {
+
+ Client client = null;
+ try {
+ String loadSSLKeyStore = System.getProperty(RestClientSSL.MSO_LOAD_SSL_CLIENT_KEYSTORE_KEY);
+ if (loadSSLKeyStore != null && loadSSLKeyStore.equalsIgnoreCase(TRUE)) {
+ KeyStore ks = getKeyStore();
+ if (ks != null) {
+ client = ClientBuilder.newBuilder().keyStore(ks, getSSlKeyStorePassword()).build();
+ logger.info("RestClientSSL not using default SSL context - setting keystore here.");
+ return client;
+ }
+ }
+ // Use default SSL context
+ client = ClientBuilder.newBuilder().sslContext(SSLContext.getDefault()).build();
+ logger.info("RestClientSSL using default SSL context!");
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ return client;
+ }
+
+ private KeyStore getKeyStore() {
+ KeyStore ks = null;
+ char[] password = getSSlKeyStorePassword().toCharArray();
+ try (FileInputStream fis = new FileInputStream(
+ Paths.get(System.getProperty(RestClientSSL.SSL_KEY_STORE_KEY)).normalize().toString())) {
+ ks = KeyStore.getInstance(KeyStore.getDefaultType());
+
+ ks.load(fis, password);
+ } catch (Exception e) {
+ return null;
+ }
- protected RestClientSSL(RestProperties props, Optional<URI> path, String accept, String contentType) {
- super(props, path, accept, contentType);
- }
+ return ks;
+ }
- @Override
- protected Client getClient() {
-
- Client client = null;
- try {
- String loadSSLKeyStore = System.getProperty(RestClientSSL.MSO_LOAD_SSL_CLIENT_KEYSTORE_KEY);
- if(loadSSLKeyStore != null && loadSSLKeyStore.equalsIgnoreCase(TRUE)) {
- KeyStore ks = getKeyStore();
- if(ks != null) {
- client = ClientBuilder.newBuilder().keyStore(ks, System.getProperty(RestClientSSL.SSL_KEY_STORE_PASSWORD_KEY)).build();
- logger.debug("RestClientSSL not using default SSL context - setting keystore here.");
- return client;
- }
- }
- //Use default SSL context
- client = ClientBuilder.newBuilder().sslContext(SSLContext.getDefault()).build();
- logger.info("RestClientSSL using default SSL context!");
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException(e);
- }
- return client;
- }
-
- private KeyStore getKeyStore() {
- KeyStore ks = null;
- char[] password = System.getProperty(RestClientSSL.SSL_KEY_STORE_PASSWORD_KEY).toCharArray();
- try(FileInputStream fis = new FileInputStream(System.getProperty(RestClientSSL.SSL_KEY_STORE_KEY))) {
- ks = KeyStore.getInstance(KeyStore.getDefaultType());
-
- ks.load(fis, password);
- }
- catch(Exception e) {
- return null;
- }
-
- return ks;
- }
+ private String getSSlKeyStorePassword() {
+ return System.getProperty("javax.net.ssl.keyStorePassword");
+ }
}