Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 61f9356

Browse files
committed
#370 Can now customize the protocol for "simple SSL"
1 parent 4188b49 commit 61f9356

File tree

4 files changed

+76
-14
lines changed

4 files changed

+76
-14
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
group=com.marklogic
22
javadocsDir=../gh-pages-marklogic-java/javadocs
33
version=3.15.1
4-
mlJavaclientUtilVersion=3.13.1
4+
mlJavaclientUtilVersion=3.13.2
55
mlJunitVersion=3.2.0
66

src/main/java/com/marklogic/appdeployer/AppConfig.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -316,15 +316,29 @@ public TokenReplacer buildTokenReplacer() {
316316
}
317317

318318
public void setSimpleSslConfig() {
319-
setRestSslContext(SimpleX509TrustManager.newSSLContext());
320-
setRestSslHostnameVerifier(DatabaseClientFactory.SSLHostnameVerifier.ANY);
321-
setRestTrustManager(new SimpleX509TrustManager());
319+
setSimpleSslConfig(null);
320+
}
321+
322+
/**
323+
* @param protocol the name of the SSL/TLS protocol to use; if null, will use whatever SimpleX509TrustManager defaults to
324+
*/
325+
public void setSimpleSslConfig(String protocol) {
326+
setRestSslContext(protocol != null ? SimpleX509TrustManager.newSSLContext(protocol) : SimpleX509TrustManager.newSSLContext());
327+
setRestSslHostnameVerifier(DatabaseClientFactory.SSLHostnameVerifier.ANY);
328+
setRestTrustManager(new SimpleX509TrustManager());
322329
}
323330

324331
public void setAppServicesSimpleSslConfig() {
325-
setAppServicesSslContext(SimpleX509TrustManager.newSSLContext());
326-
setAppServicesSslHostnameVerifier(DatabaseClientFactory.SSLHostnameVerifier.ANY);
327-
setAppServicesTrustManager(new SimpleX509TrustManager());
332+
setAppServicesSimpleSslConfig(null);
333+
}
334+
335+
/**
336+
* @param protocol the name of the SSL/TLS protocol to use; if null, will use whatever SimpleX509TrustManager defaults to
337+
*/
338+
public void setAppServicesSimpleSslConfig(String protocol) {
339+
setAppServicesSslContext(protocol != null ? SimpleX509TrustManager.newSSLContext(protocol) : SimpleX509TrustManager.newSSLContext());
340+
setAppServicesSslHostnameVerifier(DatabaseClientFactory.SSLHostnameVerifier.ANY);
341+
setAppServicesTrustManager(new SimpleX509TrustManager());
328342
}
329343

330344
/**

src/main/java/com/marklogic/appdeployer/DefaultAppConfigFactory.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.marklogic.client.ext.SecurityContextType;
55
import com.marklogic.mgmt.util.PropertySource;
66
import com.marklogic.mgmt.util.PropertySourceFactory;
7+
import org.springframework.util.StringUtils;
78

89
import java.io.File;
910
import java.util.*;
@@ -218,10 +219,17 @@ public void initialize() {
218219
logger.info("App Services external name: " + prop);
219220
config.setAppServicesExternalName(prop);
220221
});
222+
221223
propertyConsumerMap.put("mlAppServicesSimpleSsl", (config, prop) -> {
222-
if ("true".equals(prop)) {
223-
logger.info("Using simple SSL context and 'ANY' hostname verifier for authenticating against the App-Services server");
224-
config.setAppServicesSimpleSslConfig();
224+
if (StringUtils.hasText(prop) && !"false".equalsIgnoreCase(prop)) {
225+
if ("true".equalsIgnoreCase(prop)) {
226+
config.setAppServicesSimpleSslConfig();
227+
} else {
228+
config.setAppServicesSimpleSslConfig(prop);
229+
}
230+
String protocol = config.getAppServicesSslContext().getProtocol();
231+
logger.info(format("Using protocol '%s' and 'ANY' hostname verifier for authenticating against the " +
232+
"App-Services server", protocol));
225233
}
226234
});
227235

@@ -284,10 +292,15 @@ public void initialize() {
284292
* setting this property will force the simplest SSL connection to be created.
285293
*/
286294
propertyConsumerMap.put("mlSimpleSsl", (config, prop) -> {
287-
if ("true".equals(prop)) {
288-
logger.info(
289-
"Using simple SSL context and 'ANY' hostname verifier for authenticating against client REST API server");
290-
config.setSimpleSslConfig();
295+
if (StringUtils.hasText(prop) && !"false".equalsIgnoreCase(prop)) {
296+
if ("true".equalsIgnoreCase(prop)) {
297+
config.setSimpleSslConfig();
298+
} else {
299+
config.setSimpleSslConfig(prop);
300+
}
301+
String protocol = config.getRestSslContext().getProtocol();
302+
logger.info(format("Using protocol '%s' and 'ANY' hostname verifier for authenticating against the " +
303+
"client REST API server", protocol));
291304
}
292305
});
293306

src/test/java/com/marklogic/appdeployer/DefaultAppConfigFactoryTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,41 @@ public void dontModifySetOfDatabasesWithForestsOnOneHostIfItsBeenConfigured() {
577577
final String message = "If the user has configured the set of databases, then the default schema and trigger databases names should not be added automatically";
578578
assertFalse(message, set.contains("example-triggers"));
579579
assertFalse(message, set.contains("example-schemas"));
580+
}
581+
582+
@Test
583+
public void appServicesSimpleSsl() {
584+
AppConfig config = new DefaultAppConfigFactory(new SimplePropertySource("mlAppServicesSimpleSsl", "true")).newAppConfig();
585+
assertEquals("TLSv1.2", config.getAppServicesSslContext().getProtocol());
586+
587+
config = new DefaultAppConfigFactory(new SimplePropertySource("mlAppServicesSimpleSsl", "TLSv1.2")).newAppConfig();
588+
assertEquals("TLSv1.2", config.getAppServicesSslContext().getProtocol());
589+
590+
config = new DefaultAppConfigFactory(new SimplePropertySource("mlAppServicesSimpleSsl", "TLSv1.1")).newAppConfig();
591+
assertEquals("TLSv1.1", config.getAppServicesSslContext().getProtocol());
592+
593+
config = new DefaultAppConfigFactory(new SimplePropertySource("mlAppServicesSimpleSsl", "false")).newAppConfig();
594+
assertNull(config.getAppServicesSslContext());
595+
596+
config = new DefaultAppConfigFactory(new SimplePropertySource()).newAppConfig();
597+
assertNull(config.getAppServicesSslContext());
598+
}
599+
600+
@Test
601+
public void restSimpleSsl() {
602+
AppConfig config = new DefaultAppConfigFactory(new SimplePropertySource("mlSimpleSsl", "true")).newAppConfig();
603+
assertEquals("TLSv1.2", config.getRestSslContext().getProtocol());
604+
605+
config = new DefaultAppConfigFactory(new SimplePropertySource("mlSimpleSsl", "TLSv1.2")).newAppConfig();
606+
assertEquals("TLSv1.2", config.getRestSslContext().getProtocol());
607+
608+
config = new DefaultAppConfigFactory(new SimplePropertySource("mlSimpleSsl", "TLSv1.1")).newAppConfig();
609+
assertEquals("TLSv1.1", config.getRestSslContext().getProtocol());
610+
611+
config = new DefaultAppConfigFactory(new SimplePropertySource("mlSimpleSsl", "false")).newAppConfig();
612+
assertNull(config.getRestSslContext());
580613

614+
config = new DefaultAppConfigFactory(new SimplePropertySource()).newAppConfig();
615+
assertNull(config.getRestSslContext());
581616
}
582617
}

0 commit comments

Comments
 (0)