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(); }