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

Commit f7e7722

Browse files
committed
#392 Can now create SSL connections using default keystore
Hacking around asdfasdf adsf more afasfd asdf
1 parent c630abf commit f7e7722

File tree

10 files changed

+354
-99
lines changed

10 files changed

+354
-99
lines changed

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

Lines changed: 91 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
import com.marklogic.client.ext.SecurityContextType;
1313
import com.marklogic.client.ext.modulesloader.impl.PropertiesModuleManager;
1414
import com.marklogic.client.ext.modulesloader.ssl.SimpleX509TrustManager;
15+
import com.marklogic.client.ext.ssl.SslUtil;
1516
import com.marklogic.client.ext.tokenreplacer.DefaultTokenReplacer;
1617
import com.marklogic.client.ext.tokenreplacer.PropertiesSource;
1718
import com.marklogic.client.ext.tokenreplacer.RoxyTokenReplacer;
1819
import com.marklogic.client.ext.tokenreplacer.TokenReplacer;
20+
import org.springframework.util.StringUtils;
1921

2022
import javax.net.ssl.SSLContext;
2123
import javax.net.ssl.X509TrustManager;
@@ -92,7 +94,11 @@ public class AppConfig {
9294
private String restCertPassword;
9395
private String restExternalName;
9496
private X509TrustManager restTrustManager;
95-
private Integer restPort = DEFAULT_PORT;
97+
private boolean restUseDefaultKeystore;
98+
private String restSslProtocol;
99+
private String restTrustManagementAlgorithm;
100+
101+
private Integer restPort = DEFAULT_PORT;
96102
private Integer testRestPort;
97103

98104
// Connection info for using the App Services client REST API - e.g. to load non-REST API modules
@@ -107,6 +113,9 @@ public class AppConfig {
107113
private String appServicesCertPassword;
108114
private String appServicesExternalName;
109115
private X509TrustManager appServicesTrustManager;
116+
private boolean appServicesUseDefaultKeystore;
117+
private String appServicesSslProtocol;
118+
private String appServicesTrustManagementAlgorithm;
110119

111120
// These can all be set to override the default names that are generated off of the "name" attribute.
112121
private String groupName = DEFAULT_GROUP;
@@ -364,15 +373,24 @@ public DatabaseClient newTestDatabaseClient() {
364373
}
365374

366375
public DatabaseClientConfig newRestDatabaseClientConfig(int port) {
367-
DatabaseClientConfig config = new DatabaseClientConfig(getHost(), port, getRestAdminUsername(), getRestAdminPassword());
368-
config.setCertFile(getRestCertFile());
369-
config.setCertPassword(getRestCertPassword());
376+
DatabaseClientConfig config = new DatabaseClientConfig(host, port, restAdminUsername, restAdminPassword);
377+
config.setCertFile(restCertFile);
378+
config.setCertPassword(restCertPassword);
370379
config.setConnectionType(restConnectionType);
371-
config.setExternalName(getRestExternalName());
380+
config.setExternalName(restExternalName);
372381
config.setSecurityContextType(restSecurityContextType);
373-
config.setSslContext(getRestSslContext());
374-
config.setSslHostnameVerifier(getRestSslHostnameVerifier());
375-
config.setTrustManager(restTrustManager);
382+
383+
if (restUseDefaultKeystore) {
384+
config.setSslProtocol(StringUtils.hasText(restSslProtocol) ? restSslProtocol : SslUtil.DEFAULT_SSL_PROTOCOL);
385+
config.setTrustManagementAlgorithm(restTrustManagementAlgorithm);
386+
config.setSslHostnameVerifier(restSslHostnameVerifier != null ? restSslHostnameVerifier : SSLHostnameVerifier.ANY);
387+
}
388+
else {
389+
config.setSslContext(restSslContext);
390+
config.setTrustManager(restTrustManager);
391+
config.setSslHostnameVerifier(restSslHostnameVerifier);
392+
}
393+
376394
return config;
377395
}
378396

@@ -394,16 +412,25 @@ public DatabaseClient newSchemasDatabaseClient() {
394412
}
395413

396414
public DatabaseClient newAppServicesDatabaseClient(String databaseName) {
397-
DatabaseClientConfig config = new DatabaseClientConfig(getHost(), getAppServicesPort(), getAppServicesUsername(), getAppServicesPassword());
398-
config.setCertFile(getAppServicesCertFile());
399-
config.setCertPassword(getAppServicesCertPassword());
415+
DatabaseClientConfig config = new DatabaseClientConfig(host, appServicesPort, appServicesUsername, appServicesPassword);
416+
config.setCertFile(appServicesCertFile);
417+
config.setCertPassword(appServicesCertPassword);
400418
config.setConnectionType(appServicesConnectionType);
401419
config.setDatabase(databaseName);
402-
config.setExternalName(getAppServicesExternalName());
420+
config.setExternalName(appServicesExternalName);
403421
config.setSecurityContextType(appServicesSecurityContextType);
404-
config.setSslContext(getAppServicesSslContext());
405-
config.setSslHostnameVerifier(getAppServicesSslHostnameVerifier());
406-
config.setTrustManager(appServicesTrustManager);
422+
423+
if (appServicesUseDefaultKeystore) {
424+
config.setSslProtocol(StringUtils.hasText(appServicesSslProtocol) ? appServicesSslProtocol : SslUtil.DEFAULT_SSL_PROTOCOL);
425+
config.setTrustManagementAlgorithm(appServicesTrustManagementAlgorithm);
426+
config.setSslHostnameVerifier(appServicesSslHostnameVerifier != null ? appServicesSslHostnameVerifier : SSLHostnameVerifier.ANY);
427+
}
428+
else {
429+
config.setSslContext(appServicesSslContext);
430+
config.setTrustManager(appServicesTrustManager);
431+
config.setSslHostnameVerifier(appServicesSslHostnameVerifier);
432+
}
433+
407434
return configuredDatabaseClientFactory.newDatabaseClient(config);
408435
}
409436

@@ -1424,4 +1451,53 @@ public void setDeployAmpsWithCma(boolean b) {
14241451
getCmaConfig().setDeployAmps(b);
14251452
}
14261453
// End of methods still used by DHF 4.3.x
1454+
1455+
1456+
public boolean isRestUseDefaultKeystore() {
1457+
return restUseDefaultKeystore;
1458+
}
1459+
1460+
public void setRestUseDefaultKeystore(boolean restUseDefaultKeystore) {
1461+
this.restUseDefaultKeystore = restUseDefaultKeystore;
1462+
}
1463+
1464+
public String getRestSslProtocol() {
1465+
return restSslProtocol;
1466+
}
1467+
1468+
public void setRestSslProtocol(String restSslProtocol) {
1469+
this.restSslProtocol = restSslProtocol;
1470+
}
1471+
1472+
public String getRestTrustManagementAlgorithm() {
1473+
return restTrustManagementAlgorithm;
1474+
}
1475+
1476+
public void setRestTrustManagementAlgorithm(String restTrustManagementAlgorithm) {
1477+
this.restTrustManagementAlgorithm = restTrustManagementAlgorithm;
1478+
}
1479+
1480+
public boolean isAppServicesUseDefaultKeystore() {
1481+
return appServicesUseDefaultKeystore;
1482+
}
1483+
1484+
public void setAppServicesUseDefaultKeystore(boolean appServicesUseDefaultKeystore) {
1485+
this.appServicesUseDefaultKeystore = appServicesUseDefaultKeystore;
1486+
}
1487+
1488+
public String getAppServicesSslProtocol() {
1489+
return appServicesSslProtocol;
1490+
}
1491+
1492+
public void setAppServicesSslProtocol(String appServicesSslProtocol) {
1493+
this.appServicesSslProtocol = appServicesSslProtocol;
1494+
}
1495+
1496+
public String getAppServicesTrustManagementAlgorithm() {
1497+
return appServicesTrustManagementAlgorithm;
1498+
}
1499+
1500+
public void setAppServicesTrustManagementAlgorithm(String appServicesTrustManagementAlgorithm) {
1501+
this.appServicesTrustManagementAlgorithm = appServicesTrustManagementAlgorithm;
1502+
}
14271503
}

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,21 @@ public void initialize() {
238238
}
239239
});
240240

241+
propertyConsumerMap.put("mlAppServicesSslProtocol", (config, prop) -> {
242+
logger.info("Using SSL protocol for App-Services server: " + prop);
243+
config.setAppServicesSslProtocol(prop);
244+
});
245+
246+
propertyConsumerMap.put("mlAppServicesUseDefaultKeystore", (config, prop) -> {
247+
logger.info("Using default JVM keystore for SSL for App-Services server: " + prop);
248+
config.setAppServicesUseDefaultKeystore(Boolean.parseBoolean(prop));
249+
});
250+
251+
propertyConsumerMap.put("mlAppServicesTrustManagementAlgorithm", (config, prop) -> {
252+
logger.info("Using trust management algorithm for SSL for App-Services server: " + prop);
253+
config.setAppServicesTrustManagementAlgorithm(prop);
254+
});
255+
241256
/**
242257
* Set this to true to prevent creating a REST API server by default.
243258
*/
@@ -309,6 +324,22 @@ public void initialize() {
309324
}
310325
});
311326

327+
propertyConsumerMap.put("mlRestSslProtocol", (config, prop) -> {
328+
logger.info("Using SSL protocol for client REST API server: " + prop);
329+
config.setRestSslProtocol(prop);
330+
});
331+
332+
propertyConsumerMap.put("mlRestUseDefaultKeystore", (config, prop) -> {
333+
logger.info("Using default JVM keystore for SSL for client REST API server: " + prop);
334+
config.setRestUseDefaultKeystore(Boolean.parseBoolean(prop));
335+
});
336+
337+
propertyConsumerMap.put("mlRestTrustManagementAlgorithm", (config, prop) -> {
338+
logger.info("Using trust management algorithm for SSL for client REST API server: " + prop);
339+
config.setRestTrustManagementAlgorithm(prop);
340+
});
341+
342+
312343
/**
313344
* mlUsername and mlPassword are the default username/password for connecting to the app's REST server (if one
314345
* exists) and to App-Services on 8000. These are processed before the other username/password properties so that

src/main/java/com/marklogic/mgmt/DefaultManageConfigFactory.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,21 @@ public void initialize() {
8282
config.setConfigureSimpleSsl(Boolean.parseBoolean(prop));
8383
});
8484

85+
propertyConsumerMap.put("mlManageSslProtocol", (config, prop) -> {
86+
logger.info("Using SSL protocol for Manage app server: " + prop);
87+
config.setSslProtocol(prop);
88+
});
89+
90+
propertyConsumerMap.put("mlManageUseDefaultKeystore", (config, prop) -> {
91+
logger.info("Using default JVM keystore for SSL for Manage app server: " + prop);
92+
config.setUseDefaultKeystore(Boolean.parseBoolean(prop));
93+
});
94+
95+
propertyConsumerMap.put("mlManageTrustManagementAlgorithm", (config, prop) -> {
96+
logger.info("Using trust management algorithm for SSL for Manage app server: " + prop);
97+
config.setTrustManagementAlgorithm(prop);
98+
});
99+
85100
propertyConsumerMap.put("mlManageCleanJsonPayloads", (config, prop) -> {
86101
logger.info("Cleaning Management API JSON payloads: " + prop);
87102
config.setCleanJsonPayloads(Boolean.parseBoolean(prop));

src/main/java/com/marklogic/mgmt/admin/DefaultAdminConfigFactory.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,21 @@ public void initialize() {
7878
logger.info("Use simple SSL for Admin interface: " + prop);
7979
config.setConfigureSimpleSsl(Boolean.parseBoolean(prop));
8080
});
81+
82+
propertyConsumerMap.put("mlAdminSslProtocol", (config, prop) -> {
83+
logger.info("Using SSL protocol for Admin app server: " + prop);
84+
config.setSslProtocol(prop);
85+
});
86+
87+
propertyConsumerMap.put("mlAdminUseDefaultKeystore", (config, prop) -> {
88+
logger.info("Using default JVM keystore for SSL for Admin app server: " + prop);
89+
config.setUseDefaultKeystore(Boolean.parseBoolean(prop));
90+
});
91+
92+
propertyConsumerMap.put("mlAdminTrustManagementAlgorithm", (config, prop) -> {
93+
logger.info("Using trust management algorithm for SSL for Admin app server: " + prop);
94+
config.setTrustManagementAlgorithm(prop);
95+
});
8196
}
8297

8398
@Override

src/main/java/com/marklogic/rest/util/RestConfig.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ public class RestConfig {
1313
private String username;
1414
private String password;
1515
private String scheme = "http";
16+
1617
private boolean configureSimpleSsl;
18+
private boolean useDefaultKeystore;
19+
private String sslProtocol;
20+
private String trustManagementAlgorithm;
21+
1722
private SSLContext sslContext;
1823
private X509HostnameVerifier hostnameVerifier;
1924

@@ -116,4 +121,28 @@ public X509HostnameVerifier getHostnameVerifier() {
116121
public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) {
117122
this.hostnameVerifier = hostnameVerifier;
118123
}
124+
125+
public String getSslProtocol() {
126+
return sslProtocol;
127+
}
128+
129+
public void setSslProtocol(String sslProtocol) {
130+
this.sslProtocol = sslProtocol;
131+
}
132+
133+
public String getTrustManagementAlgorithm() {
134+
return trustManagementAlgorithm;
135+
}
136+
137+
public void setTrustManagementAlgorithm(String trustManagementAlgorithm) {
138+
this.trustManagementAlgorithm = trustManagementAlgorithm;
139+
}
140+
141+
public boolean isUseDefaultKeystore() {
142+
return useDefaultKeystore;
143+
}
144+
145+
public void setUseDefaultKeystore(boolean useDefaultKeystore) {
146+
this.useDefaultKeystore = useDefaultKeystore;
147+
}
119148
}

0 commit comments

Comments
 (0)