This is an automated email from the ASF dual-hosted git repository.

sai_boorlagadda pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 7890652  GEODE-5338: Geode client to support Trust and Keystore 
rotation (#2244)
7890652 is described below

commit 7890652974c3268b098074ca12c74973b2639a6d
Author: Sai Boorlagadda <[email protected]>
AuthorDate: Mon Sep 17 09:25:05 2018 -0700

    GEODE-5338: Geode client to support Trust and Keystore rotation (#2244)
    
    A new SSL property 'ssl-use-default-context' is added to let Geode use
    default SSL context. When set to true Geode uses default SSL context as
    returned by SSLContext.getInstance('Default') or uses the context as set
    by using SSLContext.setDefault().
    
    Hostname validation is enabled when using default context
---
 .../internal/CustomSSLProviderDistributedTest.java | 270 +++++++++++++++++++++
 .../internal/provider/CustomKeyManagerFactory.java | 108 +++++++++
 .../provider/CustomTrustManagerFactory.java        | 107 ++++++++
 .../tcpserver/TCPClientSSLIntegrationTest.java     |  40 ++-
 .../geode/distributed/ConfigurationProperties.java |  25 +-
 .../internal/AbstractDistributionConfig.java       |   7 +-
 .../distributed/internal/DistributionConfig.java   |  29 ++-
 .../internal/DistributionConfigImpl.java           |  33 ++-
 .../org/apache/geode/internal/admin/SSLConfig.java |  12 +-
 .../internal/net/SSLConfigurationFactory.java      |   3 +-
 .../apache/geode/internal/net/SocketCreator.java   |   8 +
 .../internal/DistributionConfigJUnitTest.java      |  22 +-
 .../v1/acceptance/CacheConnectionJUnitTest.java    |   1 +
 13 files changed, 631 insertions(+), 34 deletions(-)

diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/CustomSSLProviderDistributedTest.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/CustomSSLProviderDistributedTest.java
new file mode 100644
index 0000000..b5b29cd
--- /dev/null
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/CustomSSLProviderDistributedTest.java
@@ -0,0 +1,270 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.cache.client.internal;
+
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_ENABLED_COMPONENTS;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_ENDPOINT_IDENTIFICATION_ENABLED;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_KEYSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_REQUIRE_AUTHENTICATION;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_USE_DEFAULT_CONTEXT;
+import static org.apache.geode.security.SecurableCommunicationChannels.ALL;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
+import java.util.Properties;
+
+import javax.net.ssl.SSLContext;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionFactory;
+import org.apache.geode.cache.RegionShortcut;
+import org.apache.geode.cache.client.ClientCache;
+import org.apache.geode.cache.client.ClientCacheFactory;
+import org.apache.geode.cache.client.ClientRegionFactory;
+import org.apache.geode.cache.client.ClientRegionShortcut;
+import org.apache.geode.cache.client.NoAvailableServersException;
+import org.apache.geode.cache.client.internal.provider.CustomKeyManagerFactory;
+import 
org.apache.geode.cache.client.internal.provider.CustomTrustManagerFactory;
+import org.apache.geode.cache.ssl.CertStores;
+import org.apache.geode.cache.ssl.TestSSLUtils.CertificateBuilder;
+import org.apache.geode.distributed.internal.tcpserver.LocatorCancelException;
+import org.apache.geode.internal.net.SocketCreatorFactory;
+import org.apache.geode.test.dunit.IgnoredException;
+import org.apache.geode.test.dunit.rules.ClusterStartupRule;
+import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.junit.categories.ClientServerTest;
+
+@Category({ClientServerTest.class})
+public class CustomSSLProviderDistributedTest {
+  private static MemberVM locator;
+  private static MemberVM server;
+
+  @Rule
+  public ClusterStartupRule cluster = new ClusterStartupRule();
+
+  private CustomKeyManagerFactory.PKIXFactory keyManagerFactory;
+  private CustomTrustManagerFactory.PKIXFactory trustManagerFactory;
+
+  private void setupCluster(Properties locatorSSLProps, Properties 
serverSSLProps) {
+    // create a cluster
+    locator = cluster.startLocatorVM(0, locatorSSLProps);
+    server = cluster.startServerVM(1, serverSSLProps, locator.getPort());
+
+    // create region
+    server.invoke(CustomSSLProviderDistributedTest::createServerRegion);
+    locator.waitUntilRegionIsReadyOnExactlyThisManyServers("/region", 1);
+  }
+
+  private static void createServerRegion() {
+    RegionFactory factory =
+        
ClusterStartupRule.getCache().createRegionFactory(RegionShortcut.REPLICATE);
+    Region r = factory.create("region");
+    r.put("serverkey", "servervalue");
+  }
+
+  @Test
+  public void hostNameIsValidatedWhenUsingDefaultContext() throws Exception {
+    CertificateBuilder locatorCertificate = new CertificateBuilder()
+        .commonName("locator")
+        // ClusterStartupRule uses 'localhost' as locator host
+        .sanDnsName(InetAddress.getLoopbackAddress().getHostName())
+        .sanDnsName(InetAddress.getLocalHost().getHostName())
+        .sanIpAddress(InetAddress.getLocalHost())
+        .sanIpAddress(InetAddress.getByName("0.0.0.0")); // to pass on windows
+
+    CertificateBuilder serverCertificate = new CertificateBuilder()
+        .commonName("server")
+        .sanDnsName(InetAddress.getLocalHost().getHostName())
+        .sanIpAddress(InetAddress.getLocalHost());
+
+    CertificateBuilder clientCertificate = new CertificateBuilder()
+        .commonName("client");
+
+    validateClientSSLConnection(locatorCertificate, serverCertificate, 
clientCertificate, true,
+        true, false, null);
+  }
+
+  @Test
+  public void clientCanChooseNotToValidateHostName() throws Exception {
+    CertificateBuilder locatorCertificate = new CertificateBuilder()
+        .commonName("locator");
+
+    CertificateBuilder serverCertificate = new CertificateBuilder()
+        .commonName("server");
+
+    CertificateBuilder clientCertificate = new CertificateBuilder()
+        .commonName("client");
+
+    validateClientSSLConnection(locatorCertificate, serverCertificate, 
clientCertificate, false,
+        false, true, null);
+  }
+
+  @Test
+  public void clientConnectionFailsIfNoHostNameInLocatorKey() throws Exception 
{
+    CertificateBuilder locatorCertificate = new CertificateBuilder()
+        .commonName("locator");
+
+    CertificateBuilder serverCertificate = new CertificateBuilder()
+        .commonName("server");
+
+    CertificateBuilder clientCertificate = new CertificateBuilder()
+        .commonName("client");
+
+    validateClientSSLConnection(locatorCertificate, serverCertificate, 
clientCertificate, false,
+        false, false, LocatorCancelException.class);
+  }
+
+  @Test
+  public void clientConnectionFailsWhenWrongHostNameInLocatorKey() throws 
Exception {
+    CertificateBuilder locatorCertificate = new CertificateBuilder()
+        .commonName("locator")
+        .sanDnsName("example.com");;
+
+    CertificateBuilder serverCertificate = new CertificateBuilder()
+        .commonName("server")
+        .sanDnsName("example.com");;
+
+    CertificateBuilder clientCertificate = new CertificateBuilder()
+        .commonName("client");
+
+    validateClientSSLConnection(locatorCertificate, serverCertificate, 
clientCertificate, false,
+        false,
+        false,
+        LocatorCancelException.class);
+  }
+
+  @Test
+  public void expectConnectionFailureWhenNoHostNameInServerKey() throws 
Exception {
+    CertificateBuilder locatorCertificateWithSan = new CertificateBuilder()
+        .commonName("locator")
+        .sanDnsName(InetAddress.getLoopbackAddress().getHostName())
+        .sanDnsName(InetAddress.getLocalHost().getHostName())
+        .sanIpAddress(InetAddress.getLocalHost());
+
+    CertificateBuilder serverCertificateWithNoSan = new CertificateBuilder()
+        .commonName("server");
+
+    CertificateBuilder clientCertificate = new CertificateBuilder()
+        .commonName("client");
+
+    validateClientSSLConnection(locatorCertificateWithSan, 
serverCertificateWithNoSan,
+        clientCertificate, false, false, false,
+        NoAvailableServersException.class);
+  }
+
+  private void validateClientSSLConnection(CertificateBuilder 
locatorCertificate,
+      CertificateBuilder serverCertificate, CertificateBuilder 
clientCertificate,
+      boolean enableHostNameVerficationForLocator, boolean 
enableHostNameVerificationForServer,
+      boolean disableHostNameVerificationForClient,
+      Class expectedExceptionOnClient)
+      throws GeneralSecurityException, IOException {
+
+    CertStores locatorStore = CertStores.locatorStore();
+    locatorStore.withCertificate(locatorCertificate);
+
+    CertStores serverStore = CertStores.serverStore();
+    serverStore.withCertificate(serverCertificate);
+
+    CertStores clientStore = CertStores.clientStore();
+    clientStore.withCertificate(clientCertificate);
+
+    Properties locatorSSLProps = locatorStore
+        .trustSelf()
+        .trust(serverStore.alias(), serverStore.certificate())
+        .trust(clientStore.alias(), clientStore.certificate())
+        .propertiesWith(ALL, false, enableHostNameVerficationForLocator);
+
+    Properties serverSSLProps = serverStore
+        .trustSelf()
+        .trust(locatorStore.alias(), locatorStore.certificate())
+        .trust(clientStore.alias(), clientStore.certificate())
+        .propertiesWith(ALL, true, enableHostNameVerificationForServer);
+
+    // this props is only to create temp keystore and truststore and get paths
+    Properties clientSSLProps = clientStore
+        .trust(locatorStore.alias(), locatorStore.certificate())
+        .trust(serverStore.alias(), serverStore.certificate())
+        .propertiesWith(ALL, true, true);
+
+    setupCluster(locatorSSLProps, serverSSLProps);
+
+    // setup client
+    keyManagerFactory =
+        new 
CustomKeyManagerFactory.PKIXFactory(clientSSLProps.getProperty(SSL_KEYSTORE));
+    keyManagerFactory.engineInit(null, null);
+
+    trustManagerFactory =
+        new 
CustomTrustManagerFactory.PKIXFactory(clientSSLProps.getProperty(SSL_TRUSTSTORE));
+    trustManagerFactory.engineInit((KeyStore) null);
+
+    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
+    sslContext.init(keyManagerFactory.engineGetKeyManagers(),
+        trustManagerFactory.engineGetTrustManagers(), null);
+    // set default context
+    SSLContext.setDefault(sslContext);
+
+    Properties clientSSLProperties = new Properties();
+    clientSSLProperties.setProperty(SSL_ENABLED_COMPONENTS, ALL);
+    clientSSLProperties.setProperty(SSL_REQUIRE_AUTHENTICATION, 
String.valueOf("true"));
+    clientSSLProperties.setProperty(SSL_USE_DEFAULT_CONTEXT, 
String.valueOf("true"));
+
+    if (disableHostNameVerificationForClient) {
+      // client chose to override default
+      clientSSLProperties.setProperty(SSL_ENDPOINT_IDENTIFICATION_ENABLED, 
String.valueOf("false"));
+    }
+
+    ClientCacheFactory clientCacheFactory = new 
ClientCacheFactory(clientSSLProperties);
+    clientCacheFactory.addPoolLocator(locator.getVM().getHost().getHostName(), 
locator.getPort());
+    ClientCache clientCache = clientCacheFactory.create();
+
+    ClientRegionFactory<String, String> regionFactory =
+        clientCache.createClientRegionFactory(ClientRegionShortcut.PROXY);
+
+    if (expectedExceptionOnClient != null) {
+      
IgnoredException.addIgnoredException("javax.net.ssl.SSLHandshakeException");
+      IgnoredException.addIgnoredException("java.net.SocketException");
+
+      Region<String, String> clientRegion = regionFactory.create("region");
+      assertThatExceptionOfType(expectedExceptionOnClient)
+          .isThrownBy(() -> clientRegion.put("clientkey", "clientvalue"));
+    } else {
+      // test client can read and write to server
+      Region<String, String> clientRegion = regionFactory.create("region");
+      assertThat("servervalue").isEqualTo(clientRegion.get("serverkey"));
+      clientRegion.put("clientkey", "clientvalue");
+
+      // test server can see data written by client
+      server.invoke(CustomSSLProviderDistributedTest::doServerRegionTest);
+    }
+
+    SocketCreatorFactory.close();
+  }
+
+  private static void doServerRegionTest() {
+    Region<String, String> region = 
ClusterStartupRule.getCache().getRegion("region");
+    assertThat("servervalue").isEqualTo(region.get("serverkey"));
+    assertThat("clientvalue").isEqualTo(region.get("clientkey"));
+  }
+}
diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/provider/CustomKeyManagerFactory.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/provider/CustomKeyManagerFactory.java
new file mode 100644
index 0000000..75cf24a
--- /dev/null
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/provider/CustomKeyManagerFactory.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.cache.client.internal.provider;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.util.logging.Logger;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.KeyManagerFactorySpi;
+import javax.net.ssl.ManagerFactoryParameters;
+import javax.net.ssl.X509ExtendedKeyManager;
+
+
+public abstract class CustomKeyManagerFactory extends KeyManagerFactorySpi {
+
+  private final Logger logger = Logger.getLogger(this.getClass().getName());
+
+  private final String algorithm;
+  private final String keyStorePath;
+  private KeyManagerFactory customKeyManagerFactory;
+  private X509ExtendedKeyManager customKeyManager;
+
+  private CustomKeyManagerFactory(String algorithm, String keyStorePath) {
+    this.algorithm = algorithm;
+    this.keyStorePath = keyStorePath;
+  }
+
+  @Override
+  public final KeyManager[] engineGetKeyManagers() {
+    X509ExtendedKeyManager systemKeyManager = getCustomKeyManager();
+    return new KeyManager[] {systemKeyManager};
+  }
+
+  @Override
+  protected final void engineInit(ManagerFactoryParameters 
managerFactoryParameters) {
+    // not supported right now
+    throw new UnsupportedOperationException("use engineInit with keystore");
+  }
+
+  @Override
+  public final void engineInit(KeyStore keyStore, char[] chars) {
+    // ignore the passed in keystore as it will be null
+    init();
+  }
+
+  private void init() {
+    String SSL_KEYSTORE_TYPE = "JKS";
+    String SSL_KEYSTORE_PASSWORD = "password";
+
+    try {
+      FileInputStream fileInputStream = new FileInputStream(keyStorePath);
+      KeyStore keyStore = KeyStore.getInstance(SSL_KEYSTORE_TYPE);
+      keyStore.load(fileInputStream, SSL_KEYSTORE_PASSWORD.toCharArray());
+      this.customKeyManagerFactory = 
KeyManagerFactory.getInstance(this.algorithm, "SunJSSE");
+      this.customKeyManagerFactory.init(keyStore, 
SSL_KEYSTORE_PASSWORD.toCharArray());
+    } catch (NoSuchAlgorithmException | IOException | CertificateException
+        | UnrecoverableKeyException | KeyStoreException | 
NoSuchProviderException e) {
+      throw new UndeclaredThrowableException(e);
+    }
+  }
+
+  private X509ExtendedKeyManager getCustomKeyManager() {
+    if (this.customKeyManager == null) {
+      for (KeyManager candidate : 
this.customKeyManagerFactory.getKeyManagers()) {
+        if (candidate instanceof X509ExtendedKeyManager) {
+          this.logger.info("Adding System Key Manager");
+          this.customKeyManager = (X509ExtendedKeyManager) candidate;
+          break;
+        }
+      }
+    }
+    return this.customKeyManager;
+  }
+
+  public static final class PKIXFactory extends CustomKeyManagerFactory {
+    public PKIXFactory(String keyStorePath) {
+      super("PKIX", keyStorePath);
+    }
+  }
+
+  public static final class SimpleFactory extends CustomKeyManagerFactory {
+    public SimpleFactory(String keyStorePath) {
+      super("SunX509", keyStorePath);
+    }
+  }
+}
diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/provider/CustomTrustManagerFactory.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/provider/CustomTrustManagerFactory.java
new file mode 100644
index 0000000..6d11455
--- /dev/null
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/provider/CustomTrustManagerFactory.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.cache.client.internal.provider;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.cert.CertificateException;
+import java.util.logging.Logger;
+
+import javax.net.ssl.ManagerFactoryParameters;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.TrustManagerFactorySpi;
+import javax.net.ssl.X509ExtendedTrustManager;
+
+
+public abstract class CustomTrustManagerFactory extends TrustManagerFactorySpi 
{
+
+  private final Logger logger = Logger.getLogger(this.getClass().getName());
+
+  private final String algorithm;
+  private final String trustStorePath;
+  private TrustManagerFactory customTrustManagerFactory;
+  private X509ExtendedTrustManager customTrustManager;
+
+  private CustomTrustManagerFactory(String algorithm, String trustStorePath) {
+    this.algorithm = algorithm;
+    this.trustStorePath = trustStorePath;
+  }
+
+  @Override
+  public final TrustManager[] engineGetTrustManagers() {
+    X509ExtendedTrustManager systemTrustManager = getCustomTrustManager();
+    return new TrustManager[] {systemTrustManager};
+  }
+
+  @Override
+  public final void engineInit(ManagerFactoryParameters 
managerFactoryParameters) {
+    // not supported right now
+    throw new UnsupportedOperationException("use engineInit with keystore");
+  }
+
+  @Override
+  public final void engineInit(KeyStore keyStore) {
+    // ignore the passed in keystore as it will be null
+    init();
+  }
+
+  private X509ExtendedTrustManager getCustomTrustManager() {
+    if (this.customTrustManager == null) {
+      for (TrustManager candidate : 
this.customTrustManagerFactory.getTrustManagers()) {
+        if (candidate instanceof X509ExtendedTrustManager) {
+          this.logger.info("Adding System Trust Manager");
+          this.customTrustManager = (X509ExtendedTrustManager) candidate;
+          break;
+        }
+      }
+    }
+    return this.customTrustManager;
+  }
+
+  private void init() {
+    String trustStoreType = "JKS";
+    String trustStorePassword = "password";
+
+    try {
+      FileInputStream fileInputStream = new FileInputStream(trustStorePath);
+      KeyStore trustStore = KeyStore.getInstance(trustStoreType);
+      trustStore.load(fileInputStream, trustStorePassword.toCharArray());
+      this.customTrustManagerFactory = 
TrustManagerFactory.getInstance(this.algorithm, "SunJSSE");
+      this.customTrustManagerFactory.init(trustStore);
+    } catch (NoSuchAlgorithmException | IOException | CertificateException | 
KeyStoreException
+        | NoSuchProviderException e) {
+      throw new UndeclaredThrowableException(e);
+    }
+  }
+
+  public static final class PKIXFactory extends CustomTrustManagerFactory {
+    public PKIXFactory(String trustStorePath) {
+      super("PKIX", trustStorePath);
+    }
+  }
+
+  public static final class SimpleFactory extends CustomTrustManagerFactory {
+    public SimpleFactory(String trustStorePath) {
+      super("SunX509", trustStorePath);
+    }
+  }
+}
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
index 1613f75..dc55a23 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
@@ -15,7 +15,10 @@
 package org.apache.geode.distributed.internal.tcpserver;
 
 import static org.apache.geode.security.SecurableCommunicationChannels.LOCATOR;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.net.InetAddress;
@@ -62,7 +65,7 @@ public class TCPClientSSLIntegrationTest {
   }
 
   private void startServerAndClient(CertificateBuilder serverCertificate,
-      CertificateBuilder clientCertificate)
+      CertificateBuilder clientCertificate, boolean enableHostNameValidation)
       throws GeneralSecurityException, IOException {
 
     CertStores serverStore = CertStores.locatorStore();
@@ -74,11 +77,11 @@ public class TCPClientSSLIntegrationTest {
     Properties serverProperties = serverStore
         .trustSelf()
         .trust(clientStore.alias(), clientStore.certificate())
-        .propertiesWith(LOCATOR, true, true);
+        .propertiesWith(LOCATOR, true, enableHostNameValidation);
 
     Properties clientProperties = clientStore
         .trust(serverStore.alias(), serverStore.certificate())
-        .propertiesWith(LOCATOR, true, true);
+        .propertiesWith(LOCATOR, true, enableHostNameValidation);
 
     startTcpServer(serverProperties);
 
@@ -94,8 +97,11 @@ public class TCPClientSSLIntegrationTest {
     localhost = InetAddress.getLocalHost();
     port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
 
+    TcpHandler tcpHandler = Mockito.mock(TcpHandler.class);
+    when(tcpHandler.processRequest(any())).thenReturn("Running!");
+
     server = new FakeTcpServer(port, localhost, sslProperties, null,
-        Mockito.mock(TcpHandler.class), Mockito.mock(PoolStatHelper.class),
+        tcpHandler, Mockito.mock(PoolStatHelper.class),
         Thread.currentThread().getThreadGroup(), "server thread");
     server.start();
   }
@@ -109,7 +115,25 @@ public class TCPClientSSLIntegrationTest {
     CertificateBuilder clientCertificate = new CertificateBuilder()
         .commonName("tcp-client");
 
-    startServerAndClient(serverCertificate, clientCertificate);
+    startServerAndClient(serverCertificate, clientCertificate, true);
+    String response =
+        (String) client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000);
+    assertThat(response).isEqualTo("Running!");
+  }
+
+  @Test
+  public void clientChooseToDisableHasHostnameValidation() throws Exception {
+    // no host name in server cert
+    CertificateBuilder serverCertificate = new CertificateBuilder()
+        .commonName("tcp-server");
+
+    CertificateBuilder clientCertificate = new CertificateBuilder()
+        .commonName("tcp-client");
+
+    startServerAndClient(serverCertificate, clientCertificate, false);
+    String response =
+        (String) client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000);
+    assertThat(response).isEqualTo("Running!");
   }
 
   @Test
@@ -120,7 +144,7 @@ public class TCPClientSSLIntegrationTest {
     CertificateBuilder clientCertificate = new CertificateBuilder()
         .commonName("tcp-client");
 
-    startServerAndClient(serverCertificate, clientCertificate);
+    startServerAndClient(serverCertificate, clientCertificate, true);
 
     assertThatExceptionOfType(LocatorCancelException.class)
         .isThrownBy(() -> client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000))
@@ -138,7 +162,7 @@ public class TCPClientSSLIntegrationTest {
     CertificateBuilder clientCertificate = new CertificateBuilder()
         .commonName("tcp-client");
 
-    startServerAndClient(serverCertificate, clientCertificate);
+    startServerAndClient(serverCertificate, clientCertificate, true);
 
     assertThatExceptionOfType(LocatorCancelException.class)
         .isThrownBy(() -> client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000))
@@ -147,7 +171,7 @@ public class TCPClientSSLIntegrationTest {
                 + localhost.getHostName() + " found."));
   }
 
-  private class FakeTcpServer extends TcpServer {
+  private static class FakeTcpServer extends TcpServer {
     private DistributionConfig distributionConfig;
 
     public FakeTcpServer(int port, InetAddress bind_address, Properties 
sslConfig,
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
index 2dd36f3..f4bdada 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
@@ -1929,15 +1929,36 @@ public interface ConfigurationProperties {
    * Geode 1.0
    */
   String DISTRIBUTED_TRANSACTIONS = "distributed-transactions";
+
+  /**
+   * The static String definition of the <i>"ssl-use-default-context"</i> 
property
+   * </p>
+   *
+   * <U>Description</U> When true, either uses the default context as returned 
by
+   * SSLContext.getInstance('Default') or uses the context as set by using
+   * SSLContext.setDefault(). If false, then specify the keystore and the 
truststore by setting
+   * ssl-keystore-* and ssl-truststore-* properties. If true, then
+   * ssl-endpoint-identification-enabled
+   * is set to true. This property does not enable SSL.
+   * </p>
+   *
+   * <U>Default</U>: "false"
+   * </p>
+   *
+   * <U>Since</U>: Geode 1.7
+   * </p>
+   */
+  String SSL_USE_DEFAULT_CONTEXT = "ssl-use-default-context";
   /**
    * The static String definition of the 
<i>"ssl-endpoint-identification-enabled"</i> property <a
    * name="ssl-endpoint-identification-enabled"/a>
    * </p>
    * <U>Description</U>: If true, clients validate server hostname using 
server certificate during
-   * SSL handshake.
+   * SSL handshake. It defaults to true when ssl-use-default-context is true 
or else false.
    * </p>
    * <U>Default</U>: code>"false"</code>
-   * <U>Since</U>: Geode 1.8
+   * </p>
+   * <U>Since</U>: Geode 1.7
    */
   String SSL_ENDPOINT_IDENTIFICATION_ENABLED = 
"ssl-endpoint-identification-enabled";
   /**
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
index 07f33a7..5cfc33b 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
@@ -161,6 +161,7 @@ import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_SERVER_AL
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE_PASSWORD;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE_TYPE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_USE_DEFAULT_CONTEXT;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_WEB_ALIAS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_WEB_SERVICE_REQUIRE_AUTHENTICATION;
 import static 
org.apache.geode.distributed.ConfigurationProperties.START_DEV_REST_API;
@@ -1362,7 +1363,11 @@ public abstract class AbstractDistributionConfig extends 
AbstractConfig
         "User defined fully qualified class name implementing PostProcessor 
interface for integrated security. Defaults to \"{0}\". Legal values can be any 
\"class name\" implementing PostProcessor that is present in the classpath.");
 
     m.put(SSL_ENDPOINT_IDENTIFICATION_ENABLED,
-        "If true, clients validate server hostname using server certificate 
during SSL handshake.");
+        "If true, clients validate server hostname using server certificate 
during SSL handshake. It defaults to true when ssl-use-default-context is true 
or else false.");
+
+    m.put(SSL_USE_DEFAULT_CONTEXT,
+        "When true, either uses the default context as returned by 
SSLContext.getInstance('Default') or uses the context as set by using 
SSLContext.setDefault(). "
+            + "If false, then specify the keystore and the truststore by 
setting ssl-keystore-* and ssl-truststore-* properties. If true, then 
ssl-endpoint-identification-enabled is set to true. This property does not 
enable SSL.");
 
     m.put(SSL_ENABLED_COMPONENTS,
         "A comma delimited list of components that require SSL 
communications");
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
index d6ee27c..e4950f4 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
@@ -162,6 +162,7 @@ import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_SERVER_AL
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE_PASSWORD;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE_TYPE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_USE_DEFAULT_CONTEXT;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_WEB_ALIAS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_WEB_SERVICE_REQUIRE_AUTHENTICATION;
 import static 
org.apache.geode.distributed.ConfigurationProperties.START_DEV_REST_API;
@@ -4880,25 +4881,18 @@ public interface DistributionConfig extends Config, 
LogConfig {
   String SERVER_SSL_ALIAS_NAME = SSL_SERVER_ALIAS;
 
   /**
-   * The default {@link 
ConfigurationProperties#SSL_ENDPOINT_IDENTIFICATION_ENABLED} value.
-   * <p>
-   * Actual value of this constant is <code>false</code>.
-   */
-  boolean DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ENABLED = false;
-
-  /**
    * Returns the value of the {@link 
ConfigurationProperties#SSL_ENDPOINT_IDENTIFICATION_ENABLED}
    * property.
    */
   @ConfigAttributeGetter(name = SSL_ENDPOINT_IDENTIFICATION_ENABLED)
-  boolean getSSLEndpointIdentificationEnabled();
+  boolean getSSLEndPointIdentificationEnabled();
 
   /**
    * Sets the value of the {@link 
ConfigurationProperties#SSL_ENDPOINT_IDENTIFICATION_ENABLED}
    * property.
    */
   @ConfigAttributeSetter(name = SSL_ENDPOINT_IDENTIFICATION_ENABLED)
-  void setSSLEndpointIdentificationEnabled(boolean enabled);
+  void setSSLEndPointIdentificationEnabled(boolean enabled);
 
   /**
    * The name of the {@link 
ConfigurationProperties#SSL_ENDPOINT_IDENTIFICATION_ENABLED} property
@@ -4938,6 +4932,23 @@ public interface DistributionConfig extends Config, 
LogConfig {
   SecurableCommunicationChannel[] DEFAULT_SSL_ENABLED_COMPONENTS =
       new SecurableCommunicationChannel[] {};
 
+  boolean DEFAULT_SSL_USE_DEFAULT_CONTEXT = false;
+
+  @ConfigAttribute(type = Boolean.class)
+  String SSL_USE_DEFAULT_CONTEXT_NAME = SSL_USE_DEFAULT_CONTEXT;
+
+  /**
+   * Returns the value of the {@link 
ConfigurationProperties#SSL_USE_DEFAULT_CONTEXT} property.
+   */
+  @ConfigAttributeGetter(name = SSL_USE_DEFAULT_CONTEXT)
+  boolean getSSLUseDefaultContext();
+
+  /**
+   * Sets the value of the {@link 
ConfigurationProperties#SSL_USE_DEFAULT_CONTEXT} property.
+   */
+  @ConfigAttributeSetter(name = SSL_USE_DEFAULT_CONTEXT)
+  void setSSLUseDefaultContext(boolean defaultContext);
+
   /**
    * Returns the value of the {@link ConfigurationProperties#SSL_PROTOCOLS} 
property.
    */
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
index 851698a..0505737 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
@@ -603,11 +603,12 @@ public class DistributionConfigImpl extends 
AbstractDistributionConfig implement
 
   private String httpServiceSSLAlias = DEFAULT_SSL_ALIAS;
 
-  private boolean sslEndpointIdentificationEnabled = 
DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ENABLED;
+  private Boolean sslEndPointIdentificationEnabled = null;
 
   private SecurableCommunicationChannel[] securableCommunicationChannels =
       DEFAULT_SSL_ENABLED_COMPONENTS;
 
+  private boolean sslUseDefaultSSLContext = DEFAULT_SSL_USE_DEFAULT_CONTEXT;
   private String sslProtocols = DEFAULT_SSL_PROTOCOLS;
   private String sslCiphers = DEFAULT_SSL_CIPHERS;
   private boolean sslRequireAuthentication = 
DEFAULT_SSL_REQUIRE_AUTHENTICATION;
@@ -849,10 +850,11 @@ public class DistributionConfigImpl extends 
AbstractDistributionConfig implement
     this.serverSSLAlias = other.getServerSSLAlias();
     this.locatorSSLAlias = other.getLocatorSSLAlias();
 
-    this.sslEndpointIdentificationEnabled = 
other.getSSLEndpointIdentificationEnabled();
+    this.sslEndPointIdentificationEnabled = 
other.getSSLEndPointIdentificationEnabled();
     this.securableCommunicationChannels =
         ((DistributionConfigImpl) other).securableCommunicationChannels;
 
+    this.sslUseDefaultSSLContext = other.getSSLUseDefaultContext();
     this.sslCiphers = other.getSSLCiphers();
     this.sslProtocols = other.getSSLProtocols();
     this.sslRequireAuthentication = other.getSSLRequireAuthentication();
@@ -2761,13 +2763,19 @@ public class DistributionConfigImpl extends 
AbstractDistributionConfig implement
   }
 
   @Override
-  public boolean getSSLEndpointIdentificationEnabled() {
-    return sslEndpointIdentificationEnabled;
+  public boolean getSSLEndPointIdentificationEnabled() {
+    // sslEndPointIdentificationEnabled is a boxed boolean and no default 
value is set, so that
+    // we can differentiate between an assigned default vs user provided 
override. This is set
+    // to true when ssl-use-default-context is true or else its false. So 
return false if its null.
+    if (this.sslEndPointIdentificationEnabled == null) {
+      return false;
+    }
+    return sslEndPointIdentificationEnabled;
   }
 
   @Override
-  public void setSSLEndpointIdentificationEnabled(final boolean 
sslEnabledIdentification) {
-    this.sslEndpointIdentificationEnabled = sslEnabledIdentification;
+  public void setSSLEndPointIdentificationEnabled(final boolean 
sslEndPointIdentificationEnabled) {
+    this.sslEndPointIdentificationEnabled = sslEndPointIdentificationEnabled;
   }
 
   @Override
@@ -2782,6 +2790,19 @@ public class DistributionConfigImpl extends 
AbstractDistributionConfig implement
   }
 
   @Override
+  public boolean getSSLUseDefaultContext() {
+    return sslUseDefaultSSLContext;
+  }
+
+  @Override
+  public void setSSLUseDefaultContext(final boolean sslUseDefaultSSLContext) {
+    if (this.sslEndPointIdentificationEnabled == null) {
+      this.sslEndPointIdentificationEnabled = Boolean.TRUE;
+    }
+    this.sslUseDefaultSSLContext = sslUseDefaultSSLContext;
+  }
+
+  @Override
   public String getSSLProtocols() {
     return sslProtocols;
   }
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/admin/SSLConfig.java 
b/geode-core/src/main/java/org/apache/geode/internal/admin/SSLConfig.java
index 5344ca6..eda1dde 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/SSLConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/SSLConfig.java
@@ -32,8 +32,8 @@ import org.apache.geode.management.internal.SSLUtil;
  */
 public class SSLConfig {
 
-  private boolean endpointIdentification =
-      DistributionConfig.DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ENABLED;
+  private boolean endpointIdentification;
+  private boolean useDefaultSSLContext = 
DistributionConfig.DEFAULT_SSL_USE_DEFAULT_CONTEXT;
   private boolean enabled = DistributionConfig.DEFAULT_SSL_ENABLED;
   private String protocols = DistributionConfig.DEFAULT_SSL_PROTOCOLS;
   private String ciphers = DistributionConfig.DEFAULT_SSL_CIPHERS;
@@ -119,6 +119,14 @@ public class SSLConfig {
     this.enabled = enabled;
   }
 
+  public boolean useDefaultSSLContext() {
+    return this.useDefaultSSLContext;
+  }
+
+  public void setUseDefaultSSLContext(boolean useDefaultSSLContext) {
+    this.useDefaultSSLContext = useDefaultSSLContext;
+  }
+
   public String getProtocols() {
     return this.protocols;
   }
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/net/SSLConfigurationFactory.java
 
b/geode-core/src/main/java/org/apache/geode/internal/net/SSLConfigurationFactory.java
index 23c0c5c..3e9c65d 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/net/SSLConfigurationFactory.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/net/SSLConfigurationFactory.java
@@ -168,7 +168,7 @@ public class SSLConfigurationFactory {
     SSLConfig sslConfig = new SSLConfig();
     sslConfig.setCiphers(distributionConfig.getSSLCiphers());
     sslConfig
-        
.setEndpointIdentificationEnabled(distributionConfig.getSSLEndpointIdentificationEnabled());
+        
.setEndpointIdentificationEnabled(distributionConfig.getSSLEndPointIdentificationEnabled());
     sslConfig
         .setEnabled(determineIfSSLEnabledForSSLComponent(distributionConfig, 
sslEnabledComponent));
     sslConfig.setKeystore(distributionConfig.getSSLKeyStore());
@@ -180,6 +180,7 @@ public class SSLConfigurationFactory {
     sslConfig.setProtocols(distributionConfig.getSSLProtocols());
     sslConfig.setRequireAuth(distributionConfig.getSSLRequireAuthentication());
     sslConfig.setAlias(distributionConfig.getSSLDefaultAlias());
+    
sslConfig.setUseDefaultSSLContext(distributionConfig.getSSLUseDefaultContext());
     return sslConfig;
   }
 
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java 
b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
index 9d75013..c93e3c4 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.net;
 
+
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.BindException;
@@ -390,6 +391,10 @@ public class SocketCreator {
    */
   private SSLContext createAndConfigureSSLContext() throws 
GeneralSecurityException, IOException {
 
+    if (sslConfig.useDefaultSSLContext()) {
+      return SSLContext.getDefault();
+    }
+
     SSLContext newSSLContext = getSSLContextInstance();
     KeyManager[] keyManagers = getKeyManagers();
     TrustManager[] trustManagers = getTrustManagers();
@@ -1036,6 +1041,9 @@ public class SocketCreator {
         SSLParameters sslParameters = sslSocket.getSSLParameters();
         sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
         sslSocket.setSSLParameters(sslParameters);
+      } else {
+        logger.warn("Your SSL configuration disables hostname validation. "
+            + "Future releases will mandate hostname validation.");
       }
 
       String[] protocols = this.sslConfig.getProtocolsAsStringArray();
diff --git 
a/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
index 80154a2..68d3ef2 100644
--- 
a/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
@@ -32,6 +32,7 @@ import static 
org.apache.geode.distributed.ConfigurationProperties.SECURITY_MANA
 import static 
org.apache.geode.distributed.ConfigurationProperties.SECURITY_POST_PROCESSOR;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_ENABLED_COMPONENTS;
 import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_ENDPOINT_IDENTIFICATION_ENABLED;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_USE_DEFAULT_CONTEXT;
 import static 
org.apache.geode.distributed.ConfigurationProperties.START_LOCATOR;
 import static 
org.apache.geode.distributed.ConfigurationProperties.STATISTIC_ARCHIVE_FILE;
 import static 
org.apache.geode.distributed.ConfigurationProperties.STATISTIC_SAMPLE_RATE;
@@ -100,7 +101,7 @@ public class DistributionConfigJUnitTest {
   @Test
   public void testGetAttributeNames() {
     String[] attNames = AbstractDistributionConfig._getAttNames();
-    assertEquals(attNames.length, 163);
+    assertThat(attNames.length).isEqualTo(164);
 
     List boolList = new ArrayList();
     List intList = new ArrayList();
@@ -134,7 +135,7 @@ public class DistributionConfigJUnitTest {
 
     // TODO - This makes no sense. One has no idea what the correct expected 
number of attributes
     // are.
-    assertEquals(32, boolList.size());
+    assertEquals(33, boolList.size());
     assertEquals(35, intList.size());
     assertEquals(87, stringList.size());
     assertEquals(5, fileList.size());
@@ -423,11 +424,22 @@ public class DistributionConfigJUnitTest {
   }
 
   @Test
-  public void testSSLEnabledEndpointValidationIsSetDefaultToFalse() {
+  public void 
testSSLEnabledEndpointValidationIsSetDefaultToTrueWhenSetUseDefaultContextIsUsed()
 {
     Properties props = new Properties();
+    props.put(SSL_ENABLED_COMPONENTS, "all");
+    props.put(SSL_USE_DEFAULT_CONTEXT, "true");
+
+    DistributionConfig config = new DistributionConfigImpl(props);
+    assertThat(config.getSSLEndPointIdentificationEnabled()).isEqualTo(true);
+  }
+
+  @Test
+  public void 
testSSLEnabledEndpointValidationIsSetDefaultToFalseWhenDefaultContextNotUsed() {
+    Properties props = new Properties();
+    props.put(SSL_ENABLED_COMPONENTS, "all");
 
     DistributionConfig config = new DistributionConfigImpl(props);
-    assertThat(config.getSSLEndpointIdentificationEnabled()).isEqualTo(false);
+    assertThat(config.getSSLEndPointIdentificationEnabled()).isEqualTo(false);
   }
 
   @Test
@@ -436,6 +448,6 @@ public class DistributionConfigJUnitTest {
     props.put(SSL_ENDPOINT_IDENTIFICATION_ENABLED, "true");
 
     DistributionConfig config = new DistributionConfigImpl(props);
-    assertThat(config.getSSLEndpointIdentificationEnabled()).isEqualTo(true);
+    assertThat(config.getSSLEndPointIdentificationEnabled()).isEqualTo(true);
   }
 }
diff --git 
a/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionJUnitTest.java
 
b/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionJUnitTest.java
index 12d9130..1f135fb 100644
--- 
a/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionJUnitTest.java
+++ 
b/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionJUnitTest.java
@@ -252,6 +252,7 @@ public class CacheConnectionJUnitTest {
     sslConfig.setKeystorePassword("password");
     sslConfig.setTruststore(trustStorePath);
     sslConfig.setKeystorePassword("password");
+    sslConfig.setEndpointIdentificationEnabled(false);
 
     SocketCreator socketCreator = new SocketCreator(sslConfig);
     return socketCreator.connectForClient("localhost", cacheServerPort, 5000);

Reply via email to