aboutsummaryrefslogtreecommitdiffstats
path: root/sdc-distribution-client/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-distribution-client/src/main')
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java130
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java13
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java3
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaCommonConfig.java17
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java12
5 files changed, 45 insertions, 130 deletions
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java
index 94e20fb..ee75102 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java
@@ -22,6 +22,7 @@ package org.onap.sdc.http;
import java.io.FileInputStream;
import java.io.IOException;
+import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
@@ -29,6 +30,7 @@ import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
@@ -39,10 +41,12 @@ import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.ssl.SSLContexts;
import org.onap.sdc.api.consumer.IConfiguration;
import org.onap.sdc.utils.Pair;
@@ -71,9 +75,7 @@ public class HttpClientFactory {
}
private Pair<String, CloseableHttpClient> createHttpsClient(IConfiguration configuration) {
- return new Pair<>(HTTPS,
- initSSL(configuration.getUser(), configuration.getPassword(), configuration.getKeyStorePath(),
- configuration.getKeyStorePassword(), configuration.activateServerTLSAuth()));
+ return new Pair<>(HTTPS, initSSLMtls(configuration));
}
private Pair<String, CloseableHttpClient> createHttpClient(IConfiguration configuration) {
@@ -84,123 +86,37 @@ public class HttpClientFactory {
.setProxy(getHttpProxyHost()).build());
}
- private CloseableHttpClient initSSL(String username, String password, String keyStorePath, String keyStorePass,
- boolean isSupportSSLVerification) {
+ private CloseableHttpClient initSSLMtls(IConfiguration configuration) {
- try {
+ try (FileInputStream kis = new FileInputStream(configuration.getKeyStorePath());
+ FileInputStream tis = new FileInputStream(configuration.getTrustStorePath())) {
- // SSLContextBuilder is not thread safe
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope("localhost", AUTHORIZATION_SCOPE_PORT),
- new UsernamePasswordCredentials(username, password));
- SSLContext sslContext;
- sslContext = SSLContext.getInstance(TLS);
- TrustManagerFactory tmf = createTrustManagerFactory();
- TrustManager[] tms = tmf.getTrustManagers();
- if (isSupportSSLVerification) {
-
- if (keyStorePath != null && !keyStorePath.isEmpty()) {
- // Using null here initialises the TMF with the default
- // trust store.
-
- // Get hold of the default trust manager
- X509TrustManager defaultTm = null;
- for (TrustManager tm : tmf.getTrustManagers()) {
- if (tm instanceof X509TrustManager) {
- defaultTm = (X509TrustManager) tm;
- break;
- }
- }
-
- // Do the same with your trust store this time
- // Adapt how you load the keystore to your needs
- KeyStore trustStore = loadKeyStore(keyStorePath, keyStorePass);
-
- tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
- tmf.init(trustStore);
-
- // Get hold of the default trust manager
- X509TrustManager myTm = null;
- for (TrustManager tm : tmf.getTrustManagers()) {
- if (tm instanceof X509TrustManager) {
- myTm = (X509TrustManager) tm;
- break;
- }
- }
-
- // Wrap it in your own class.
- final X509TrustManager finalDefaultTm = defaultTm;
- final X509TrustManager finalMyTm = myTm;
- X509TrustManager customTm = new X509TrustManager() {
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- // If you're planning to use client-cert auth,
- // merge results from "defaultTm" and "myTm".
- return finalDefaultTm.getAcceptedIssuers();
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType)
- throws CertificateException {
- try {
- finalMyTm.checkServerTrusted(chain, authType);
- } catch (CertificateException e) {
- // This will throw another CertificateException
- // if this fails too.
- finalDefaultTm.checkServerTrusted(chain, authType);
- }
- }
-
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType)
- throws CertificateException {
- // If you're planning to use client-cert auth,
- // do the same as checking the server.
- finalDefaultTm.checkClientTrusted(chain, authType);
- }
- };
-
- tms = new TrustManager[] { customTm };
-
- }
-
- sslContext.init(null, tms, null);
- SSLContext.setDefault(sslContext);
-
- } else {
-
- SSLContextBuilder builder = new SSLContextBuilder();
-
- builder.loadTrustMaterial(null, (chain, authType) -> true);
-
- sslContext = builder.build();
- }
+ new UsernamePasswordCredentials(configuration.getUser(), configuration.getPassword()));
+
+ final KeyStore ks = KeyStore.getInstance("JKS");
+ ks.load(kis, configuration.getKeyStorePassword().toCharArray());
+ final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+ keyManagerFactory.init(ks, configuration.getKeyStorePassword().toCharArray());
+
+ final KeyStore ts = KeyStore.getInstance("JKS");
+ ts.load(tis, configuration.getTrustStorePassword().toCharArray());
+ final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ trustManagerFactory.init(ts);
+ final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(ts, new TrustSelfSignedStrategy()).loadKeyMaterial(ks, configuration.getKeyStorePassword().toCharArray()).build();
HostnameVerifier hostnameVerifier = (hostname, session) -> hostname.equalsIgnoreCase(session.getPeerHost());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[] { TLS }, null,
- hostnameVerifier);
+ hostnameVerifier);
+
return HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).setProxy(getHttpsProxyHost())
- .setSSLSocketFactory(sslsf).build();
+ .setSSLSocketFactory(sslsf).build();
} catch (Exception e) {
throw new HttpSdcClientException("Failed to create https client", e);
}
}
- private TrustManagerFactory createTrustManagerFactory() throws NoSuchAlgorithmException, KeyStoreException {
- TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
- tmf.init(DEFAULT_INIT_KEY_STORE_VALUE);
- return tmf;
- }
-
- private KeyStore loadKeyStore(String keyStorePath, String keyStorePass)
- throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
- KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
- try (FileInputStream keyStoreData = new FileInputStream(keyStorePath)) {
- trustStore.load(keyStoreData, keyStorePass.toCharArray());
- }
- return trustStore;
- }
-
private HttpHost getHttpProxyHost() {
HttpHost proxyHost = null;
if (configuration.isUseSystemProxy() && System.getProperty("http.proxyHost") != null
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java
index add4185..8841856 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java
@@ -21,15 +21,14 @@
package org.onap.sdc.impl;
import java.util.List;
-
import org.onap.sdc.api.consumer.IConfiguration;
public class Configuration implements IConfiguration {
- private List<String> msgBusAddressList;
+ private String msgBusAddressList;
private final String kafkaSecurityProtocolConfig;
private final String kafkaSaslMechanism;
- private final String kafkaSaslJaasConfig;
+ private String kafkaSaslJaasConfig = null;
private final int kafkaConsumerMaxPollInterval;
private final int kafkaConsumerSessionTimeout;
private String sdcStatusTopicName;
@@ -60,7 +59,9 @@ public class Configuration implements IConfiguration {
public Configuration(IConfiguration other) {
this.kafkaSecurityProtocolConfig = other.getKafkaSecurityProtocolConfig();
this.kafkaSaslMechanism = other.getKafkaSaslMechanism();
- this.kafkaSaslJaasConfig = other.getKafkaSaslJaasConfig();
+ if (!"SSL".equals(this.kafkaSecurityProtocolConfig)) {
+ this.kafkaSaslJaasConfig = other.getKafkaSaslJaasConfig();
+ }
this.comsumerID = other.getConsumerID();
this.consumerGroup = other.getConsumerGroup();
this.pollingInterval = other.getPollingInterval();
@@ -233,11 +234,11 @@ public class Configuration implements IConfiguration {
this.sdcNotificationTopicName = sdcNotificationTopicName;
}
- public List<String> getMsgBusAddress() {
+ public String getMsgBusAddress() {
return msgBusAddressList;
}
- public void setMsgBusAddress(List<String> newMsgBusAddress) {
+ public void setMsgBusAddress(String newMsgBusAddress) {
msgBusAddressList = newMsgBusAddress;
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java
index a34ba1e..0c05b58 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java
@@ -30,6 +30,7 @@ import fj.data.Either;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
@@ -324,7 +325,7 @@ public class DistributionClientImpl implements IDistributionClient {
errorWrapper.setInnerElement(kafkaData.right().value());
} else {
KafkaDataResponse kafkaDataResponse = kafkaData.left().value();
- configuration.setMsgBusAddress(Collections.singletonList(kafkaDataResponse.getKafkaBootStrapServer()));
+ configuration.setMsgBusAddress(kafkaDataResponse.getKafkaBootStrapServer());
configuration.setNotificationTopicName(kafkaDataResponse.getDistrNotificationTopicName());
configuration.setStatusTopicName(kafkaDataResponse.getDistrStatusTopicName());
log.debug("MessageBus cluster info retrieved successfully {}", kafkaData.left().value());
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaCommonConfig.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaCommonConfig.java
index 477e677..b285bfe 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaCommonConfig.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaCommonConfig.java
@@ -19,18 +19,22 @@
*/
package org.onap.sdc.utils.kafka;
+import java.util.Properties;
+import java.util.UUID;
+import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.producer.ProducerConfig;
-import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.common.config.SaslConfigs;
import org.apache.kafka.common.config.SslConfigs;
import org.onap.sdc.impl.Configuration;
-import java.util.Properties;
-import java.util.UUID;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class KafkaCommonConfig {
+ private static final Logger log = LoggerFactory.getLogger(KafkaCommonConfig.class);
+
private final Configuration configuration;
- public KafkaCommonConfig(Configuration configuration){
+ public KafkaCommonConfig(Configuration configuration) {
this.configuration = configuration;
}
@@ -47,7 +51,6 @@ public class KafkaCommonConfig {
props.put(ConsumerConfig.ALLOW_AUTO_CREATE_TOPICS_CONFIG, false);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
-
return props;
}
@@ -70,10 +73,10 @@ public class KafkaCommonConfig {
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, configuration.getTrustStorePassword());
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, configuration.getTrustStorePath());
props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, configuration.getKeyStorePassword());
+ props.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, "");
props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, configuration.getKeyStorePath());
props.put(SslConfigs.SSL_KEY_PASSWORD_CONFIG, configuration.getKeyStorePassword());
- }
- else{
+ } else {
props.put(SaslConfigs.SASL_JAAS_CONFIG, configuration.getKafkaSaslJaasConfig());
props.put(SaslConfigs.SASL_MECHANISM, configuration.getKafkaSaslMechanism());
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java
index b151b23..e0b51eb 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java
@@ -20,18 +20,12 @@
package org.onap.sdc.utils.kafka;
-import java.util.List;
import java.util.Properties;
-import java.util.UUID;
import java.util.concurrent.Future;
-import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.clients.producer.KafkaProducer;
-import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.apache.kafka.common.KafkaException;
-import org.apache.kafka.common.config.SaslConfigs;
-import org.apache.kafka.common.config.SslConfigs;
import org.onap.sdc.impl.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +37,7 @@ public class SdcKafkaProducer {
private static final Logger log = LoggerFactory.getLogger(SdcKafkaProducer.class);
final KafkaProducer<String, String> producer;
- private final List<String> msgBusAddresses;
+ private final String msgBusAddresses;
private final String topicName;
/**
@@ -89,9 +83,9 @@ public class SdcKafkaProducer {
}
/**
- * @return The list kafka endpoints
+ * @return The list of kafka endpoints
*/
- public List<String> getMsgBusAddresses() {
+ public String getMsgBusAddresses() {
return msgBusAddresses;
}