purushah commented on code in PR #3692:
URL: https://github.com/apache/storm/pull/3692#discussion_r1777536771


##########
storm-client/src/jvm/org/apache/storm/utils/CuratorUtils.java:
##########
@@ -84,6 +89,120 @@ protected static void 
setupBuilder(CuratorFrameworkFactory.Builder builder, fina
         if (auth != null && auth.scheme != null && auth.payload != null) {
             builder.authorization(auth.scheme, auth.payload);
         }
+        boolean sslEnabled = 
ObjectReader.getBoolean(conf.get(Config.ZK_SSL_ENABLE), false);
+        if (sslEnabled) {
+            TruststoreKeystore truststoreKeystore = new 
TruststoreKeystore(conf);
+            ZKClientConfig zkClientConfig = new ZKClientConfig();
+            try {
+                setSslConfiguration(zkClientConfig, truststoreKeystore);
+            } catch (ConfigurationException e) {
+                throw new RuntimeException(e);
+            }
+            builder.zkClientConfig(zkClientConfig);
+        }
+    }
+
+    /**
+     * Configure ZooKeeper Client with SSL/TLS connection.
+     * @param zkClientConfig ZooKeeper Client configuration
+     * @param truststoreKeystore The truststore and keystore configs
+     */
+    private static void setSslConfiguration(ZKClientConfig zkClientConfig,
+                                            TruststoreKeystore 
truststoreKeystore) throws ConfigurationException {
+        setSslConfiguration(zkClientConfig, new ClientX509Util(), 
truststoreKeystore);
+    }
+
+    private static void setSslConfiguration(ZKClientConfig zkClientConfig,
+                                            ClientX509Util x509Util, 
TruststoreKeystore truststoreKeystore)
+            throws ConfigurationException {
+        validateSslConfiguration(truststoreKeystore);
+        LOG.info("Configuring the ZooKeeper client to use SSL/TLS encryption 
for connecting to the "
+                + "ZooKeeper server.");
+        LOG.debug("Configuring the ZooKeeper client with {} location: {}.",
+                truststoreKeystore.keystoreLocation,
+                Config.ZK_SSL_KEYSTORE_LOCATION);
+        LOG.debug("Configuring the ZooKeeper client with {} location: {}.",
+                truststoreKeystore.truststoreLocation,
+                Config.ZK_SSL_TRUSTSTORE_LOCATION);
+
+        zkClientConfig.setProperty(ZKClientConfig.SECURE_CLIENT, "true");
+        zkClientConfig.setProperty(ZKClientConfig.ZOOKEEPER_CLIENT_CNXN_SOCKET,
+                CLIENT_CNXN);
+        zkClientConfig.setProperty(x509Util.getSslKeystoreLocationProperty(),
+                truststoreKeystore.keystoreLocation);
+        zkClientConfig.setProperty(x509Util.getSslKeystorePasswdProperty(),
+                truststoreKeystore.keystorePassword);
+        zkClientConfig.setProperty(x509Util.getSslTruststoreLocationProperty(),
+                truststoreKeystore.truststoreLocation);
+        zkClientConfig.setProperty(x509Util.getSslTruststorePasswdProperty(),
+                truststoreKeystore.truststorePassword);
+        
zkClientConfig.setProperty(x509Util.getSslHostnameVerificationEnabledProperty(),
+                truststoreKeystore.hostnameVerification.toString());
+    }
+
+    private static void validateSslConfiguration(TruststoreKeystore 
truststoreKeystore) throws ConfigurationException {
+        if (StringUtils.isEmpty(truststoreKeystore.keystoreLocation)) {
+            throw new ConfigurationException(
+                    "The keystore location parameter is empty for the 
ZooKeeper client connection.");
+        }
+        if (StringUtils.isEmpty(truststoreKeystore.keystorePassword)) {
+            throw new ConfigurationException(
+                    "The keystore password parameter is empty for the 
ZooKeeper client connection.");
+        }
+        if (StringUtils.isEmpty(truststoreKeystore.truststoreLocation)) {
+            throw new ConfigurationException(
+                    "The truststore location parameter is empty for the 
ZooKeeper client connection" + ".");
+        }
+        if (StringUtils.isEmpty(truststoreKeystore.truststorePassword)) {
+            throw new ConfigurationException(
+                    "The truststore password parameter is empty for the 
ZooKeeper client connection" + ".");
+        }
+    }
+
+
+    /**
+     * Helper class to contain the Truststore/Keystore paths for the ZK client 
connection over
+     * SSL/TLS.
+     */
+    public static class TruststoreKeystore {

Review Comment:
   We can't make it private as it is used by test cases. Will make it package 
private.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@storm.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to