diff --git a/core/pom.xml b/core/pom.xml
index 77c2dd875..61185da3f 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
core
diff --git a/core/src/main/java/com/arangodb/ArangoDB.java b/core/src/main/java/com/arangodb/ArangoDB.java
index 7ebdb2e7e..56efa4758 100644
--- a/core/src/main/java/com/arangodb/ArangoDB.java
+++ b/core/src/main/java/com/arangodb/ArangoDB.java
@@ -356,6 +356,7 @@ public interface ArangoDB extends ArangoSerdeAccessor {
/**
* Reset the server log levels
* Revert the server's log level settings to the values they had at startup, as determined by the startup options specified on the command-line, a configuration file, and the factory defaults.
+ *
* @since ArangoDB 3.12
*/
LogLevelEntity resetLogLevels(LogLevelOptions options);
@@ -484,6 +485,39 @@ public Builder useSsl(final Boolean useSsl) {
return this;
}
+ /**
+ * Sets the SSL certificate value as Base64 encoded String
+ *
+ * @param sslCertValue the SSL certificate value as Base64 encoded String
+ * @return {@link ArangoDB.Builder}
+ */
+ public Builder sslCertValue(final String sslCertValue) {
+ config.setSslCertValue(sslCertValue);
+ return this;
+ }
+
+ /**
+ * Sets the SSL Trust manager algorithm
+ *
+ * @param sslAlgorithm the name of the SSL Trust manager algorithm
+ * @return {@link ArangoDB.Builder}
+ */
+ public Builder sslAlgorithm(final String sslAlgorithm) {
+ config.setSslAlgorithm(sslAlgorithm);
+ return this;
+ }
+
+ /**
+ * Sets the SSLContext protocol, default: {@code TLS}
+ *
+ * @param sslProtocol the name of the SSLContext protocol
+ * @return {@link ArangoDB.Builder}
+ */
+ public Builder sslProtocol(final String sslProtocol) {
+ config.setSslProtocol(sslProtocol);
+ return this;
+ }
+
/**
* Sets the SSL context to be used when {@code true} is passed through {@link #useSsl(Boolean)}.
*
@@ -716,6 +750,7 @@ public Builder compressionLevel(Integer level) {
/**
* Configuration specific for {@link com.arangodb.internal.net.ProtocolProvider}.
+ *
* @return {@link ArangoDB.Builder}
*/
public Builder protocolConfig(ProtocolConfig protocolConfig) {
diff --git a/core/src/main/java/com/arangodb/config/ArangoConfigProperties.java b/core/src/main/java/com/arangodb/config/ArangoConfigProperties.java
index 832c8862d..ee961acf1 100644
--- a/core/src/main/java/com/arangodb/config/ArangoConfigProperties.java
+++ b/core/src/main/java/com/arangodb/config/ArangoConfigProperties.java
@@ -19,6 +19,9 @@ public interface ArangoConfigProperties {
String KEY_JWT = "jwt";
String KEY_TIMEOUT = "timeout";
String KEY_USE_SSL = "useSsl";
+ String KEY_SSL_CERT_VALUE = "sslCertValue";
+ String KEY_SSL_ALGORITHM = "sslAlgorithm";
+ String KEY_SSL_PROTOCOL = "sslProtocol";
String KEY_VERIFY_HOST = "verifyHost";
String KEY_CHUNK_SIZE = "chunkSize";
String KEY_PIPELINING = "pipelining";
@@ -103,6 +106,18 @@ default Optional getUseSsl() {
return Optional.empty();
}
+ default Optional getSslCertValue() {
+ return Optional.empty();
+ }
+
+ default Optional getSslAlgorithm() {
+ return Optional.empty();
+ }
+
+ default Optional getSslProtocol() {
+ return Optional.empty();
+ }
+
default Optional getVerifyHost() {
return Optional.empty();
}
diff --git a/core/src/main/java/com/arangodb/internal/ArangoDefaults.java b/core/src/main/java/com/arangodb/internal/ArangoDefaults.java
index 25448187c..2f68fd53e 100644
--- a/core/src/main/java/com/arangodb/internal/ArangoDefaults.java
+++ b/core/src/main/java/com/arangodb/internal/ArangoDefaults.java
@@ -48,6 +48,7 @@ public final class ArangoDefaults {
public static final Integer DEFAULT_TIMEOUT = 0;
public static final Long DEFAULT_CONNECTION_TTL_HTTP = 30_000L;
public static final Boolean DEFAULT_USE_SSL = false;
+ public static final String DEFAULT_SSL_PROTOCOL = "TLS";
public static final Boolean DEFAULT_VERIFY_HOST = true;
public static final Integer DEFAULT_CHUNK_SIZE = 30_000;
public static final Boolean DEFAULT_PIPELINING = false;
diff --git a/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java b/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java
index f95e0a4e2..a13d41cdb 100644
--- a/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java
+++ b/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java
@@ -16,7 +16,12 @@
import com.fasterxml.jackson.databind.Module;
import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManagerFactory;
+import java.io.ByteArrayInputStream;
import java.lang.reflect.InvocationTargetException;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
@@ -30,6 +35,9 @@ public class ArangoConfig {
private String password;
private String jwt;
private Boolean useSsl;
+ private Optional sslCertValue;
+ private Optional sslAlgorithm;
+ private String sslProtocol;
private SSLContext sslContext;
private Boolean verifyHost;
private Integer chunkSize;
@@ -69,6 +77,9 @@ public void loadProperties(final ArangoConfigProperties properties) {
// FIXME: make jwt field Optional
jwt = properties.getJwt().orElse(null);
useSsl = properties.getUseSsl().orElse(ArangoDefaults.DEFAULT_USE_SSL);
+ sslCertValue = properties.getSslCertValue();
+ sslAlgorithm = properties.getSslAlgorithm();
+ sslProtocol = properties.getSslProtocol().orElse(ArangoDefaults.DEFAULT_SSL_PROTOCOL);
verifyHost = properties.getVerifyHost().orElse(ArangoDefaults.DEFAULT_VERIFY_HOST);
chunkSize = properties.getChunkSize().orElse(ArangoDefaults.DEFAULT_CHUNK_SIZE);
pipelining = properties.getPipelining().orElse(ArangoDefaults.DEFAULT_PIPELINING);
@@ -151,7 +162,22 @@ public void setUseSsl(Boolean useSsl) {
this.useSsl = useSsl;
}
+ public void setSslCertValue(String sslCertValue) {
+ this.sslCertValue = Optional.ofNullable(sslCertValue);
+ }
+
+ public void setSslAlgorithm(String sslAlgorithm) {
+ this.sslAlgorithm = Optional.ofNullable(sslAlgorithm);
+ }
+
+ public void setSslProtocol(String sslProtocol) {
+ this.sslProtocol = sslProtocol;
+ }
+
public SSLContext getSslContext() {
+ if (sslContext == null) {
+ sslContext = createSslContext();
+ }
return sslContext;
}
@@ -342,4 +368,26 @@ public ProtocolConfig getProtocolConfig() {
public void setProtocolConfig(ProtocolConfig protocolConfig) {
this.protocolConfig = protocolConfig;
}
+
+ private SSLContext createSslContext() {
+ try {
+ if (sslCertValue.isPresent()) {
+ ByteArrayInputStream is = new ByteArrayInputStream(Base64.getDecoder().decode(sslCertValue.get()));
+ Certificate cert = CertificateFactory.getInstance("X.509").generateCertificate(is);
+ KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+ ks.load(null);
+ ks.setCertificateEntry("arangodb", cert);
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance(sslAlgorithm.orElseGet(TrustManagerFactory::getDefaultAlgorithm));
+ tmf.init(ks);
+ SSLContext sc = SSLContext.getInstance(sslProtocol);
+ sc.init(null, tmf.getTrustManagers(), null);
+ return sc;
+ } else {
+ return SSLContext.getDefault();
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
}
diff --git a/core/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java b/core/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java
index f7d865f81..c1eadb402 100644
--- a/core/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java
+++ b/core/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java
@@ -109,6 +109,21 @@ public Optional getUseSsl() {
return Optional.ofNullable(getProperty(KEY_USE_SSL)).map(Boolean::valueOf);
}
+ @Override
+ public Optional getSslCertValue() {
+ return Optional.ofNullable(getProperty(KEY_SSL_CERT_VALUE));
+ }
+
+ @Override
+ public Optional getSslAlgorithm() {
+ return Optional.ofNullable(getProperty(KEY_SSL_ALGORITHM));
+ }
+
+ @Override
+ public Optional getSslProtocol() {
+ return Optional.ofNullable(getProperty(KEY_SSL_PROTOCOL));
+ }
+
@Override
public Optional getVerifyHost() {
return Optional.ofNullable(getProperty(KEY_VERIFY_HOST)).map(Boolean::valueOf);
diff --git a/driver/pom.xml b/driver/pom.xml
index a8a3a7cd3..ca8b33bd0 100644
--- a/driver/pom.xml
+++ b/driver/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
arangodb-java-driver
diff --git a/http-protocol/pom.xml b/http-protocol/pom.xml
index 514e99c34..68b797140 100644
--- a/http-protocol/pom.xml
+++ b/http-protocol/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
http-protocol
diff --git a/http-protocol/src/main/java/com/arangodb/http/HttpConnection.java b/http-protocol/src/main/java/com/arangodb/http/HttpConnection.java
index d777f0e3f..f75c3639b 100644
--- a/http-protocol/src/main/java/com/arangodb/http/HttpConnection.java
+++ b/http-protocol/src/main/java/com/arangodb/http/HttpConnection.java
@@ -55,7 +55,6 @@
import org.slf4j.LoggerFactory;
import javax.net.ssl.SSLContext;
-import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map.Entry;
@@ -169,17 +168,7 @@ private static String getUserAgent() {
}
if (Boolean.TRUE.equals(config.getUseSsl())) {
- SSLContext ctx;
- if (config.getSslContext() != null) {
- ctx = config.getSslContext();
- } else {
- try {
- ctx = SSLContext.getDefault();
- } catch (NoSuchAlgorithmException e) {
- throw ArangoDBException.of(e);
- }
- }
-
+ SSLContext ctx = config.getSslContext();
webClientOptions
.setSsl(true)
.setUseAlpn(true)
diff --git a/jackson-serde-json/pom.xml b/jackson-serde-json/pom.xml
index 948c175d4..b757b6ba2 100644
--- a/jackson-serde-json/pom.xml
+++ b/jackson-serde-json/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
jackson-serde-json
diff --git a/jackson-serde-vpack/pom.xml b/jackson-serde-vpack/pom.xml
index b2d068133..ab2d368ac 100644
--- a/jackson-serde-vpack/pom.xml
+++ b/jackson-serde-vpack/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
jackson-serde-vpack
diff --git a/jsonb-serde/pom.xml b/jsonb-serde/pom.xml
index 7027b9d02..85797fc32 100644
--- a/jsonb-serde/pom.xml
+++ b/jsonb-serde/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
jsonb-serde
diff --git a/pom.xml b/pom.xml
index a574ba455..85c3dfb7d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.arangodb
arangodb-java-driver-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
2016
release-parent
diff --git a/release-parent/pom.xml b/release-parent/pom.xml
index 6a65de066..b05eab4f2 100644
--- a/release-parent/pom.xml
+++ b/release-parent/pom.xml
@@ -6,7 +6,7 @@
com.arangodb
arangodb-java-driver-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
pom
diff --git a/shaded/pom.xml b/shaded/pom.xml
index a7be647e1..e3808b565 100644
--- a/shaded/pom.xml
+++ b/shaded/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
arangodb-java-driver-shaded
diff --git a/test-functional/pom.xml b/test-functional/pom.xml
index d1b319e7d..7f54df83a 100644
--- a/test-functional/pom.xml
+++ b/test-functional/pom.xml
@@ -8,7 +8,7 @@
../test-parent
com.arangodb
test-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
test-functional
diff --git a/test-functional/src/test-ssl/java/com/arangodb/ArangoSslTest.java b/test-functional/src/test-ssl/java/com/arangodb/ArangoSslTest.java
index 092276a81..b454c6111 100644
--- a/test-functional/src/test-ssl/java/com/arangodb/ArangoSslTest.java
+++ b/test-functional/src/test-ssl/java/com/arangodb/ArangoSslTest.java
@@ -20,6 +20,7 @@
package com.arangodb;
+import com.arangodb.config.ArangoConfigProperties;
import com.arangodb.entity.ArangoDBVersion;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
@@ -55,6 +56,36 @@ void connect(Protocol protocol) {
assertThat(version).isNotNull();
}
+ @ParameterizedTest
+ @EnumSource(Protocol.class)
+ void connectWithCertConf(Protocol protocol) {
+ assumeTrue(protocol != Protocol.VST);
+
+ final ArangoDB arangoDB = new ArangoDB.Builder()
+ .protocol(protocol)
+ .host("172.28.0.1", 8529)
+ .password("test")
+ .useSsl(true)
+ .sslCertValue("MIIDezCCAmOgAwIBAgIEeDCzXzANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdVbmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRIwEAYDVQQDEwlsb2NhbGhvc3QwHhcNMjAxMTAxMTg1MTE5WhcNMzAxMDMwMTg1MTE5WjBuMRAwDgYDVQQGEwdVbmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1WiDnd4+uCmMG539ZNZB8NwI0RZF3sUSQGPx3lkqaFTZVEzMZL76HYvdc9Qg7difyKyQ09RLSpMALX9euSseD7bZGnfQH52BnKcT09eQ3wh7aVQ5sN2omygdHLC7X9usntxAfv7NzmvdogNXoJQyY/hSZff7RIqWH8NnAUKkjqOe6Bf5LDbxHKESmrFBxOCOnhcpvZWetwpiRdJVPwUn5P82CAZzfiBfmBZnB7D0l+/6Cv4jMuH26uAIcixnVekBQzl1RgwczuiZf2MGO64vDMMJJWE9ClZF1uQuQrwXF6qwhuP1Hnkii6wNbTtPWlGSkqeutr004+Hzbf8KnRY4PAgMBAAGjITAfMB0GA1UdDgQWBBTBrv9Awynt3C5IbaCNyOW5v4DNkTANBgkqhkiG9w0BAQsFAAOCAQEAIm9rPvDkYpmzpSIhR3VXG9Y71gxRDrqkEeLsMoEyqGnw/zx1bDCNeGg2PncLlW6zTIipEBooixIE9U7KxHgZxBy0Et6EEWvIUmnr6F4F+dbTD050GHlcZ7eOeqYTPYeQC502G1Fo4tdNi4lDP9L9XZpf7Q1QimRH2qaLS03ZFZa2tY7ah/RQqZL8Dkxx8/zc25sgTHVpxoK853glBVBs/ENMiyGJWmAXQayewY3EPt/9wGwV4KmU3dPDleQeXSUGPUISeQxFjy+jCw21pYviWVJTNBA9l5ny3GhEmcnOT/gQHCvVRLyGLMbaMZ4JrPwb+aAtBgrgeiK4xeSMMvrbhw==")
+ .verifyHost(false)
+ .build();
+ final ArangoDBVersion version = arangoDB.getVersion();
+ assertThat(version).isNotNull();
+ }
+
+ @ParameterizedTest
+ @EnumSource(Protocol.class)
+ void connectWithFileProperties(Protocol protocol) {
+ assumeTrue(protocol != Protocol.VST);
+
+ final ArangoDB arangoDB = new ArangoDB.Builder()
+ .loadProperties(ArangoConfigProperties.fromFile("arangodb-ssl.properties"))
+ .protocol(protocol)
+ .build();
+ final ArangoDBVersion version = arangoDB.getVersion();
+ assertThat(version).isNotNull();
+ }
+
@ParameterizedTest
@EnumSource(Protocol.class)
void connectWithoutValidSslContext(Protocol protocol) {
diff --git a/test-functional/src/test/java/com/arangodb/ArangoConfigTest.java b/test-functional/src/test/java/com/arangodb/ArangoConfigTest.java
index 2e00339a0..c017ef718 100644
--- a/test-functional/src/test/java/com/arangodb/ArangoConfigTest.java
+++ b/test-functional/src/test/java/com/arangodb/ArangoConfigTest.java
@@ -5,11 +5,15 @@
import com.arangodb.internal.config.ArangoConfig;
import org.junit.jupiter.api.Test;
+import javax.net.ssl.SSLContext;
+
+import java.security.NoSuchAlgorithmException;
+
import static org.assertj.core.api.Assertions.assertThat;
public class ArangoConfigTest {
@Test
- void ArangoConfigDefaultValues() {
+ void ArangoConfigDefaultValues() throws NoSuchAlgorithmException {
ArangoConfig cfg = new ArangoConfig();
assertThat(cfg.getHosts()).isEqualTo(ArangoDefaults.DEFAULT_HOSTS);
assertThat(cfg.getProtocol()).isEqualTo(Protocol.HTTP2_JSON);
@@ -18,7 +22,7 @@ void ArangoConfigDefaultValues() {
assertThat(cfg.getPassword()).isNull();
assertThat(cfg.getJwt()).isNull();
assertThat(cfg.getUseSsl()).isEqualTo(ArangoDefaults.DEFAULT_USE_SSL);
- assertThat(cfg.getSslContext()).isNull();
+ assertThat(cfg.getSslContext()).isEqualTo(SSLContext.getDefault());
assertThat(cfg.getVerifyHost()).isEqualTo(ArangoDefaults.DEFAULT_VERIFY_HOST);
assertThat(cfg.getChunkSize()).isEqualTo(ArangoDefaults.DEFAULT_CHUNK_SIZE);
assertThat(cfg.getMaxConnections()).isEqualTo(ArangoDefaults.MAX_CONNECTIONS_HTTP2_DEFAULT);
diff --git a/test-functional/src/test/java/com/arangodb/UserAgentTest.java b/test-functional/src/test/java/com/arangodb/UserAgentTest.java
index f8d1008ff..6a7ea2555 100644
--- a/test-functional/src/test/java/com/arangodb/UserAgentTest.java
+++ b/test-functional/src/test/java/com/arangodb/UserAgentTest.java
@@ -10,7 +10,7 @@
class UserAgentTest extends BaseJunit5 {
- private static final String EXPECTED_VERSION = "7.20.0";
+ private static final String EXPECTED_VERSION = "7.21.0-SNAPSHOT";
private static final boolean SHADED = Boolean.parseBoolean(System.getProperty("shaded"));
diff --git a/test-functional/src/test/resources/META-INF/native-image/resource-config.json b/test-functional/src/test/resources/META-INF/native-image/resource-config.json
index a603a885a..9d96e052d 100644
--- a/test-functional/src/test/resources/META-INF/native-image/resource-config.json
+++ b/test-functional/src/test/resources/META-INF/native-image/resource-config.json
@@ -4,6 +4,9 @@
{
"pattern": "\\Qarangodb.properties\\E"
},
+ {
+ "pattern": "\\Qarangodb-ssl.properties\\E"
+ },
{
"pattern": "\\Qarangodb-bad.properties\\E"
},
diff --git a/test-functional/src/test/resources/arangodb-ssl.properties b/test-functional/src/test/resources/arangodb-ssl.properties
new file mode 100644
index 000000000..eb0c74f48
--- /dev/null
+++ b/test-functional/src/test/resources/arangodb-ssl.properties
@@ -0,0 +1,7 @@
+arangodb.hosts=172.28.0.1:8529
+arangodb.password=test
+arangodb.useSsl=true
+arangodb.sslCertValue=MIIDezCCAmOgAwIBAgIEeDCzXzANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdVbmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRIwEAYDVQQDEwlsb2NhbGhvc3QwHhcNMjAxMTAxMTg1MTE5WhcNMzAxMDMwMTg1MTE5WjBuMRAwDgYDVQQGEwdVbmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1WiDnd4+uCmMG539ZNZB8NwI0RZF3sUSQGPx3lkqaFTZVEzMZL76HYvdc9Qg7difyKyQ09RLSpMALX9euSseD7bZGnfQH52BnKcT09eQ3wh7aVQ5sN2omygdHLC7X9usntxAfv7NzmvdogNXoJQyY/hSZff7RIqWH8NnAUKkjqOe6Bf5LDbxHKESmrFBxOCOnhcpvZWetwpiRdJVPwUn5P82CAZzfiBfmBZnB7D0l+/6Cv4jMuH26uAIcixnVekBQzl1RgwczuiZf2MGO64vDMMJJWE9ClZF1uQuQrwXF6qwhuP1Hnkii6wNbTtPWlGSkqeutr004+Hzbf8KnRY4PAgMBAAGjITAfMB0GA1UdDgQWBBTBrv9Awynt3C5IbaCNyOW5v4DNkTANBgkqhkiG9w0BAQsFAAOCAQEAIm9rPvDkYpmzpSIhR3VXG9Y71gxRDrqkEeLsMoEyqGnw/zx1bDCNeGg2PncLlW6zTIipEBooixIE9U7KxHgZxBy0Et6EEWvIUmnr6F4F+dbTD050GHlcZ7eOeqYTPYeQC502G1Fo4tdNi4lDP9L9XZpf7Q1QimRH2qaLS03ZFZa2tY7ah/RQqZL8Dkxx8/zc25sgTHVpxoK853glBVBs/ENMiyGJWmAXQayewY3EPt/9wGwV4KmU3dPDleQeXSUGPUISeQxFjy+jCw21pYviWVJTNBA9l5ny3GhEmcnOT/gQHCvVRLyGLMbaMZ4JrPwb+aAtBgrgeiK4xeSMMvrbhw==
+arangodb.sslAlgorithm=SunX509
+arangodb.sslProtocol=TLS
+arangodb.verifyHost=false
diff --git a/test-non-functional/pom.xml b/test-non-functional/pom.xml
index cc802d7f8..f78b035a9 100644
--- a/test-non-functional/pom.xml
+++ b/test-non-functional/pom.xml
@@ -8,7 +8,7 @@
../test-parent
com.arangodb
test-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
test-non-functional
diff --git a/test-non-functional/src/test/java/mp/ArangoConfigPropertiesMPImpl.java b/test-non-functional/src/test/java/mp/ArangoConfigPropertiesMPImpl.java
index 4cac7a647..136869308 100644
--- a/test-non-functional/src/test/java/mp/ArangoConfigPropertiesMPImpl.java
+++ b/test-non-functional/src/test/java/mp/ArangoConfigPropertiesMPImpl.java
@@ -21,6 +21,9 @@ public final class ArangoConfigPropertiesMPImpl implements ArangoConfigPropertie
private Optional jwt;
private Optional timeout;
private Optional useSsl;
+ private Optional sslCertValue;
+ private Optional sslAlgorithm;
+ private Optional sslProtocol;
private Optional verifyHost;
private Optional chunkSize;
private Optional pipelining;
@@ -71,6 +74,21 @@ public Optional getUseSsl() {
return useSsl;
}
+ @Override
+ public Optional getSslCertValue() {
+ return sslCertValue;
+ }
+
+ @Override
+ public Optional getSslAlgorithm() {
+ return sslAlgorithm;
+ }
+
+ @Override
+ public Optional getSslProtocol() {
+ return sslProtocol;
+ }
+
@Override
public Optional getVerifyHost() {
return verifyHost;
diff --git a/test-non-functional/src/test/java/mp/ConfigMPDefaultsTest.java b/test-non-functional/src/test/java/mp/ConfigMPDefaultsTest.java
index 5a8f861ef..ad98ea4e9 100644
--- a/test-non-functional/src/test/java/mp/ConfigMPDefaultsTest.java
+++ b/test-non-functional/src/test/java/mp/ConfigMPDefaultsTest.java
@@ -23,6 +23,9 @@ private void checkResult(ArangoConfigProperties config) {
assertThat(config.getJwt()).isNotPresent();
assertThat(config.getTimeout()).isEmpty();
assertThat(config.getUseSsl()).isEmpty();
+ assertThat(config.getSslCertValue()).isEmpty();
+ assertThat(config.getSslAlgorithm()).isEmpty();
+ assertThat(config.getSslProtocol()).isEmpty();
assertThat(config.getVerifyHost()).isEmpty();
assertThat(config.getChunkSize()).isEmpty();
assertThat(config.getPipelining()).isEmpty();
diff --git a/test-non-functional/src/test/java/mp/ConfigMPTest.java b/test-non-functional/src/test/java/mp/ConfigMPTest.java
index 5d5f605e3..38a556be0 100644
--- a/test-non-functional/src/test/java/mp/ConfigMPTest.java
+++ b/test-non-functional/src/test/java/mp/ConfigMPTest.java
@@ -21,6 +21,9 @@ class ConfigMPTest {
private final String jwt = "testJwt";
private final Integer timeout = 9876;
private final Boolean useSsl = true;
+ private final String sslCertValue = "sslCertValue";
+ private final String sslAlgorithm = "sslAlgorithm";
+ private final String sslProtocol = "sslProtocol";
private final Boolean verifyHost = false;
private final Integer vstChunkSize = 1234;
private final Boolean pipelining = true;
@@ -57,6 +60,9 @@ private void checkResult(ArangoConfigProperties config) {
.hasValue(jwt);
assertThat(config.getTimeout()).hasValue(timeout);
assertThat(config.getUseSsl()).hasValue(useSsl);
+ assertThat(config.getSslCertValue()).hasValue(sslCertValue);
+ assertThat(config.getSslAlgorithm()).hasValue(sslAlgorithm);
+ assertThat(config.getSslProtocol()).hasValue(sslProtocol);
assertThat(config.getVerifyHost()).hasValue(verifyHost);
assertThat(config.getChunkSize()).hasValue(vstChunkSize);
assertThat(config.getPipelining()).hasValue(pipelining);
diff --git a/test-non-functional/src/test/resources/arangodb-config-test.properties b/test-non-functional/src/test/resources/arangodb-config-test.properties
index 1d5e675af..251b348ae 100644
--- a/test-non-functional/src/test/resources/arangodb-config-test.properties
+++ b/test-non-functional/src/test/resources/arangodb-config-test.properties
@@ -5,6 +5,9 @@ adb.password=testPassword
adb.jwt=testJwt
adb.timeout=9876
adb.useSsl=true
+adb.sslCertValue=sslCertValue
+adb.sslAlgorithm=sslAlgorithm
+adb.sslProtocol=sslProtocol
adb.verifyHost=false
adb.chunkSize=1234
adb.pipelining=true
diff --git a/test-parent/pom.xml b/test-parent/pom.xml
index c17fcb594..87e93ea8a 100644
--- a/test-parent/pom.xml
+++ b/test-parent/pom.xml
@@ -7,7 +7,7 @@
com.arangodb
arangodb-java-driver-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
pom
diff --git a/test-perf/pom.xml b/test-perf/pom.xml
index e834ea725..dbb055779 100644
--- a/test-perf/pom.xml
+++ b/test-perf/pom.xml
@@ -7,7 +7,7 @@
../test-parent
com.arangodb
test-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
test-perf
diff --git a/test-resilience/pom.xml b/test-resilience/pom.xml
index ae662bb32..df922ca99 100644
--- a/test-resilience/pom.xml
+++ b/test-resilience/pom.xml
@@ -6,7 +6,7 @@
../test-parent
com.arangodb
test-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
4.0.0
diff --git a/tutorial/gradle/build.gradle b/tutorial/gradle/build.gradle
index 0047761d2..fb20f878d 100644
--- a/tutorial/gradle/build.gradle
+++ b/tutorial/gradle/build.gradle
@@ -12,7 +12,7 @@ repositories {
}
dependencies {
- implementation 'com.arangodb:arangodb-java-driver:7.20.0'
+ implementation 'com.arangodb:arangodb-java-driver:7.21.0-SNAPSHOT'
}
ext {
diff --git a/tutorial/maven/pom.xml b/tutorial/maven/pom.xml
index a40773634..481baaa1c 100644
--- a/tutorial/maven/pom.xml
+++ b/tutorial/maven/pom.xml
@@ -19,7 +19,7 @@
com.arangodb
arangodb-java-driver
- 7.20.0
+ 7.21.0-SNAPSHOT
diff --git a/vst-protocol/pom.xml b/vst-protocol/pom.xml
index 262352ba2..e49eced8d 100644
--- a/vst-protocol/pom.xml
+++ b/vst-protocol/pom.xml
@@ -8,7 +8,7 @@
../release-parent
com.arangodb
release-parent
- 7.20.0
+ 7.21.0-SNAPSHOT
vst-protocol
diff --git a/vst-protocol/src/main/java/com/arangodb/vst/internal/VstConnection.java b/vst-protocol/src/main/java/com/arangodb/vst/internal/VstConnection.java
index 8b4cdc211..870051fa6 100644
--- a/vst-protocol/src/main/java/com/arangodb/vst/internal/VstConnection.java
+++ b/vst-protocol/src/main/java/com/arangodb/vst/internal/VstConnection.java
@@ -35,7 +35,6 @@
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -150,11 +149,7 @@ public synchronized void open() throws IOException {
LOGGER.debug(String.format("[%s]: Open connection to %s", connectionName, host));
}
if (Boolean.TRUE.equals(useSsl)) {
- if (sslContext != null) {
- socket = sslContext.getSocketFactory().createSocket();
- } else {
- socket = SSLSocketFactory.getDefault().createSocket();
- }
+ socket = sslContext.getSocketFactory().createSocket();
} else {
socket = SocketFactory.getDefault().createSocket();
}