diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpConnectorFactory.java b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpConnectorFactory.java
index e407fa5b..f77869f2 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpConnectorFactory.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpConnectorFactory.java
@@ -32,9 +32,7 @@ import org.springframework.util.ClassUtils;
import org.springframework.vault.support.ClientOptions;
import org.springframework.vault.support.SslConfiguration;
-import static org.springframework.vault.client.ClientHttpRequestFactoryFactory.createKeyManagerFactory;
-import static org.springframework.vault.client.ClientHttpRequestFactoryFactory.createTrustManagerFactory;
-import static org.springframework.vault.client.ClientHttpRequestFactoryFactory.hasSslConfiguration;
+import static org.springframework.vault.client.ClientHttpRequestFactoryFactory.*;
/**
* Factory for {@link ClientHttpConnector} that supports
@@ -44,6 +42,7 @@ import static org.springframework.vault.client.ClientHttpRequestFactoryFactory.h
* dependencies.
*
* @author Mark Paluch
+ * @author Ryan Gow
* @since 2.2
*/
public class ClientHttpConnectorFactory {
@@ -106,11 +105,11 @@ public class ClientHttpConnectorFactory {
sslConfiguration.getKeyConfiguration()));
}
- if (sslConfiguration.getEnabledProtocols() != null) {
+ if (!sslConfiguration.getEnabledProtocols().isEmpty()) {
sslContextBuilder.protocols(sslConfiguration.getEnabledProtocols());
}
- if (sslConfiguration.getEnabledCipherSuites() != null) {
+ if (!sslConfiguration.getEnabledCipherSuites().isEmpty()) {
sslContextBuilder.ciphers(sslConfiguration.getEnabledCipherSuites());
}
}
@@ -197,12 +196,12 @@ public class ClientHttpConnectorFactory {
sslContextFactory.setKeyManagerPassword(new String(keyConfiguration.getKeyPassword()));
}
- if (sslConfiguration.getEnabledProtocols() != null) {
+ if (!sslConfiguration.getEnabledProtocols().isEmpty()) {
sslContextFactory
.setIncludeProtocols(sslConfiguration.getEnabledProtocols().toArray(new String[0]));
}
- if (sslConfiguration.getEnabledCipherSuites() != null) {
+ if (!sslConfiguration.getEnabledCipherSuites().isEmpty()) {
sslContextFactory
.setIncludeCipherSuites(sslConfiguration.getEnabledCipherSuites().toArray(new String[0]));
}
diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java
index 2abe6fe6..8b03c6db 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java
@@ -43,6 +43,10 @@ import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509ExtendedKeyManager;
import javax.net.ssl.X509TrustManager;
+import io.netty.handler.ssl.SslContextBuilder;
+import io.netty.handler.ssl.SslProvider;
+import okhttp3.ConnectionSpec;
+import okhttp3.OkHttpClient.Builder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.client.config.RequestConfig;
@@ -52,6 +56,7 @@ import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.impl.conn.DefaultSchemePortResolver;
import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
+
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.Netty4ClientHttpRequestFactory;
@@ -68,17 +73,13 @@ import org.springframework.vault.support.SslConfiguration;
import org.springframework.vault.support.SslConfiguration.KeyConfiguration;
import org.springframework.vault.support.SslConfiguration.KeyStoreConfiguration;
-import io.netty.handler.ssl.SslContextBuilder;
-import io.netty.handler.ssl.SslProvider;
-import okhttp3.ConnectionSpec;
-import okhttp3.OkHttpClient.Builder;
-
/**
* Factory for {@link ClientHttpRequestFactory} that supports Apache HTTP Components,
* OkHttp, Netty and the JDK HTTP client (in that order). This factory configures a
* {@link ClientHttpRequestFactory} depending on the available dependencies.
*
* @author Mark Paluch
+ * @author Ryan Gow
* @since 2.2
*/
public class ClientHttpRequestFactoryFactory {
@@ -301,13 +302,13 @@ public class ClientHttpRequestFactoryFactory {
String[] enabledProtocols = null;
- if (sslConfiguration.getEnabledProtocols() != null) {
+ if (!sslConfiguration.getEnabledProtocols().isEmpty()) {
enabledProtocols = sslConfiguration.getEnabledProtocols().toArray(new String[0]);
}
String[] enabledCipherSuites = null;
- if (sslConfiguration.getEnabledCipherSuites() != null) {
+ if (!sslConfiguration.getEnabledCipherSuites().isEmpty()) {
enabledCipherSuites = sslConfiguration.getEnabledCipherSuites().toArray(new String[0]);
}
@@ -362,11 +363,11 @@ public class ClientHttpRequestFactoryFactory {
ConnectionSpec.Builder sslConnectionSpecBuilder = new ConnectionSpec.Builder(sslConnectionSpec);
- if (sslConfiguration.getEnabledProtocols() != null) {
+ if (!sslConfiguration.getEnabledProtocols().isEmpty()) {
sslConnectionSpecBuilder.tlsVersions(sslConfiguration.getEnabledProtocols().toArray(new String[0]));
}
- if (sslConfiguration.getEnabledCipherSuites() != null) {
+ if (!sslConfiguration.getEnabledCipherSuites().isEmpty()) {
sslConnectionSpecBuilder
.cipherSuites(sslConfiguration.getEnabledCipherSuites().toArray(new String[0]));
}
@@ -413,11 +414,11 @@ public class ClientHttpRequestFactoryFactory {
sslConfiguration.getKeyConfiguration()));
}
- if (sslConfiguration.getEnabledProtocols() != null) {
+ if (!sslConfiguration.getEnabledProtocols().isEmpty()) {
sslContextBuilder.protocols(sslConfiguration.getEnabledProtocols());
}
- if (sslConfiguration.getEnabledCipherSuites() != null) {
+ if (!sslConfiguration.getEnabledCipherSuites().isEmpty()) {
sslContextBuilder.ciphers(sslConfiguration.getEnabledCipherSuites());
}
diff --git a/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java b/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java
index 67eccdec..f0ef1c24 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/config/EnvironmentVaultConfiguration.java
@@ -17,10 +17,13 @@ package org.springframework.vault.config;
import java.net.URI;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -29,35 +32,15 @@ import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
-import org.springframework.vault.authentication.AppIdAuthentication;
-import org.springframework.vault.authentication.AppIdAuthenticationOptions;
+import org.springframework.vault.authentication.*;
import org.springframework.vault.authentication.AppIdAuthenticationOptions.AppIdAuthenticationOptionsBuilder;
-import org.springframework.vault.authentication.AppIdUserIdMechanism;
-import org.springframework.vault.authentication.AppRoleAuthentication;
-import org.springframework.vault.authentication.AppRoleAuthenticationOptions;
import org.springframework.vault.authentication.AppRoleAuthenticationOptions.AppRoleAuthenticationOptionsBuilder;
import org.springframework.vault.authentication.AppRoleAuthenticationOptions.RoleId;
import org.springframework.vault.authentication.AppRoleAuthenticationOptions.SecretId;
-import org.springframework.vault.authentication.AwsEc2Authentication;
-import org.springframework.vault.authentication.AwsEc2AuthenticationOptions;
import org.springframework.vault.authentication.AwsEc2AuthenticationOptions.AwsEc2AuthenticationOptionsBuilder;
-import org.springframework.vault.authentication.AzureMsiAuthentication;
-import org.springframework.vault.authentication.AzureMsiAuthenticationOptions;
import org.springframework.vault.authentication.AzureMsiAuthenticationOptions.AzureMsiAuthenticationOptionsBuilder;
-import org.springframework.vault.authentication.ClientAuthentication;
-import org.springframework.vault.authentication.ClientCertificateAuthentication;
-import org.springframework.vault.authentication.CubbyholeAuthentication;
-import org.springframework.vault.authentication.CubbyholeAuthenticationOptions;
import org.springframework.vault.authentication.CubbyholeAuthenticationOptions.CubbyholeAuthenticationOptionsBuilder;
-import org.springframework.vault.authentication.IpAddressUserId;
-import org.springframework.vault.authentication.KubernetesAuthentication;
-import org.springframework.vault.authentication.KubernetesAuthenticationOptions;
import org.springframework.vault.authentication.KubernetesAuthenticationOptions.KubernetesAuthenticationOptionsBuilder;
-import org.springframework.vault.authentication.KubernetesJwtSupplier;
-import org.springframework.vault.authentication.KubernetesServiceAccountTokenFile;
-import org.springframework.vault.authentication.MacAddressUserId;
-import org.springframework.vault.authentication.StaticUserId;
-import org.springframework.vault.authentication.TokenAuthentication;
import org.springframework.vault.client.VaultEndpoint;
import org.springframework.vault.support.SslConfiguration;
import org.springframework.vault.support.SslConfiguration.KeyStoreConfiguration;
@@ -105,6 +88,10 @@ import org.springframework.web.client.RestOperations;
*
Truststore resource: {@code vault.ssl.trust-store} (optional)
* Truststore password: {@code vault.ssl.trust-store-password} (optional)
* Truststore type: {@code vault.ssl.trust-store-password} (since 2.3, optional)
+ * Enabled SSL/TLS protocols: {@code vault.ssl.enabled-protocols} (since 2.3.2,
+ * optional, protocols separated with comma)
+ * Enabled SSL/TLS cipher suites: {@code vault.ssl.enabled-cipher-suites} (since
+ * 2.3.2, optional, cipher suites separated with comma)
*
*
* Authentication method: {@code vault.authentication} (defaults to {@literal TOKEN},
@@ -174,6 +161,7 @@ import org.springframework.web.client.RestOperations;
* @author Michal Budzyn
* @author Raoof Mohammed
* @author Justin Bertrand
+ * @author Ryan Gow
* @see org.springframework.core.env.Environment
* @see org.springframework.core.env.PropertySource
* @see VaultEndpoint
@@ -232,9 +220,9 @@ public class EnvironmentVaultConfiguration extends AbstractVaultConfiguration im
KeyStoreConfiguration trustStoreConfiguration = getKeyStoreConfiguration("vault.ssl.trust-store",
"vault.ssl.trust-store-password", "vault.ssl.trust-store-type");
- List enabledProtocols = getList("vault.ssl.enabled-protocols");
+ List enabledProtocols = getPropertyAsList("vault.ssl.enabled-protocols");
- List enabledCipherSuites = getList("vault.ssl.enabled-cipher-suites");
+ List enabledCipherSuites = getPropertyAsList("vault.ssl.enabled-cipher-suites");
return new SslConfiguration(keyStoreConfiguration, trustStoreConfiguration, enabledProtocols,
enabledCipherSuites);
@@ -427,14 +415,15 @@ public class EnvironmentVaultConfiguration extends AbstractVaultConfiguration im
return new KubernetesAuthentication(builder.build(), restOperations());
}
- private List getList(String key) {
+ private List getPropertyAsList(String key) {
+
String val = getEnvironment().getProperty(key);
if (val == null) {
- return null;
+ return Collections.emptyList();
}
- return Arrays.asList(val.split(","));
+ return Arrays.stream(val.split(",")).map(String::trim).collect(Collectors.toList());
}
@Nullable
diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java b/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java
index 84f178af..b6f207c6 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/support/SslConfiguration.java
@@ -37,6 +37,7 @@ import org.springframework.util.Assert;
* for Client Certificate authentication.
*
* @author Mark Paluch
+ * @author Ryan Gow
* @see Resource
* @see java.security.KeyStore
* @see org.springframework.vault.authentication.ClientCertificateAuthentication
@@ -113,7 +114,7 @@ public class SslConfiguration {
* cipher suite strings used by the enabled Java SSL provider. May be {@literal null}
* to indicate the SSL socket factory should use a default list of enabled cipher
* suites.
- * @since 2.4
+ * @since 2.3.2
* @see sun.security.ssl.ProtocolVersion
* @see sun.security.ssl.CipherSuite
*/
@@ -128,10 +129,8 @@ public class SslConfiguration {
this.keyStoreConfiguration = keyStoreConfiguration;
this.keyConfiguration = keyConfiguration;
this.trustStoreConfiguration = trustStoreConfiguration;
- this.enabledProtocols = enabledProtocols != null
- ? Collections.unmodifiableList(new ArrayList<>(enabledProtocols)) : null;
- this.enabledCipherSuites = enabledCipherSuites != null
- ? Collections.unmodifiableList(new ArrayList<>(enabledCipherSuites)) : null;
+ this.enabledProtocols = Collections.unmodifiableList(new ArrayList<>(enabledProtocols));
+ this.enabledCipherSuites = Collections.unmodifiableList(new ArrayList<>(enabledCipherSuites));
}
/**
@@ -146,7 +145,8 @@ public class SslConfiguration {
*/
public SslConfiguration(KeyStoreConfiguration keyStoreConfiguration, KeyConfiguration keyConfiguration,
KeyStoreConfiguration trustStoreConfiguration) {
- this(keyStoreConfiguration, keyConfiguration, trustStoreConfiguration, null, null);
+ this(keyStoreConfiguration, keyConfiguration, trustStoreConfiguration, Collections.emptyList(),
+ Collections.emptyList());
}
/**
@@ -163,7 +163,7 @@ public class SslConfiguration {
* cipher suite strings used by the enabled Java SSL provider. May be {@literal null}
* to indicate the SSL socket factory should use a default list of enabled cipher
* suites.
- * @since 2.4
+ * @since 2.3.2
* @see sun.security.ssl.ProtocolVersion
* @see sun.security.ssl.CipherSuite
*/
@@ -364,7 +364,7 @@ public class SslConfiguration {
* indicates that the SSL socket factory should use a default list of enabled protocol
* versions.
* @return the list of enabled SSL protocol versions.
- * @since 2.4
+ * @since 2.3.2
*/
public List getEnabledProtocols() {
return this.enabledProtocols;
@@ -373,12 +373,29 @@ public class SslConfiguration {
/**
* Create a new {@link SslConfiguration} with the enabled protocol versions applied
* retaining the other configuration from this instance.
- * @param enabledProtocols may be {@literal null}.
+ * @param enabledProtocols must not be {@literal null}.
* @return a new {@link SslConfiguration} with the enabled protocol versions applied.
- * @since 2.4
+ * @since 2.3.2
+ * @see sun.security.ssl.ProtocolVersion
+ */
+ public SslConfiguration withEnabledProtocols(String... enabledProtocols) {
+
+ Assert.notNull(enabledProtocols, "Enabled protocols must not be null");
+
+ return withEnabledProtocols(Arrays.asList(enabledProtocols));
+ }
+
+ /**
+ * Create a new {@link SslConfiguration} with the enabled protocol versions applied
+ * retaining the other configuration from this instance.
+ * @param enabledProtocols must not be {@literal null}.
+ * @return a new {@link SslConfiguration} with the enabled protocol versions applied.
+ * @since 2.3.2
* @see sun.security.ssl.ProtocolVersion
*/
public SslConfiguration withEnabledProtocols(List enabledProtocols) {
+
+ Assert.notNull(enabledProtocols, "Enabled protocols must not be null");
return new SslConfiguration(this.keyStoreConfiguration, this.keyConfiguration, this.trustStoreConfiguration,
enabledProtocols, this.enabledCipherSuites);
}
@@ -388,7 +405,7 @@ public class SslConfiguration {
* indicates that the SSL socket factory should use a default list of enabled cipher
* suites.
* @return the list of enabled SSL cipher suites.
- * @since 2.4
+ * @since 2.3.2
*/
public List getEnabledCipherSuites() {
return this.enabledCipherSuites;
@@ -397,12 +414,30 @@ public class SslConfiguration {
/**
* Create a new {@link SslConfiguration} with the enabled cipher suites applied
* retaining the other configuration from this instance.
- * @param enabledCipherSuites may be {@literal null}.
+ * @param enabledCipherSuites must not be {@literal null}.
* @return a new {@link SslConfiguration} with the enabled cipher suites applied.
- * @since 2.4
+ * @since 2.3.2
+ * @see sun.security.ssl.CipherSuite
+ */
+ public SslConfiguration withEnabledCipherSuites(String... enabledCipherSuites) {
+
+ Assert.notNull(enabledProtocols, "Enabled cipher suites must not be null");
+
+ return withEnabledCipherSuites(Arrays.asList(enabledCipherSuites));
+ }
+
+ /**
+ * Create a new {@link SslConfiguration} with the enabled cipher suites applied
+ * retaining the other configuration from this instance.
+ * @param enabledCipherSuites must not be {@literal null}.
+ * @return a new {@link SslConfiguration} with the enabled cipher suites applied.
+ * @since 2.3.2
* @see sun.security.ssl.CipherSuite
*/
public SslConfiguration withEnabledCipherSuites(List enabledCipherSuites) {
+
+ Assert.notNull(enabledProtocols, "Enabled cipher suites must not be null");
+
return new SslConfiguration(this.keyStoreConfiguration, this.keyConfiguration, this.trustStoreConfiguration,
this.enabledProtocols, enabledCipherSuites);
}
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpConnectorFactoryIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpConnectorFactoryIntegrationTests.java
index c58d149a..18efcf0e 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpConnectorFactoryIntegrationTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpConnectorFactoryIntegrationTests.java
@@ -15,6 +15,9 @@
*/
package org.springframework.vault.client;
+import java.util.ArrayList;
+import java.util.List;
+
import org.junit.jupiter.api.Test;
import org.springframework.http.client.reactive.ClientHttpConnector;
@@ -23,17 +26,14 @@ import org.springframework.vault.util.Settings;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClientResponseException;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
-import static org.springframework.vault.client.ClientHttpConnectorFactory.JettyClient;
-import static org.springframework.vault.client.ClientHttpConnectorFactory.ReactorNetty;
-
-import java.util.ArrayList;
-import java.util.List;
+import static org.assertj.core.api.AssertionsForClassTypes.*;
+import static org.springframework.vault.client.ClientHttpConnectorFactory.*;
/**
* Integration tests for {@link ClientHttpConnectorFactory}.
*
* @author Mark Paluch
+ * @author Ryan Gow
*/
class ClientHttpConnectorFactoryIntegrationTests {
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpRequestFactoryFactoryIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpRequestFactoryFactoryIntegrationTests.java
index 1af062e9..28c58802 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpRequestFactoryFactoryIntegrationTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/client/ClientHttpRequestFactoryFactoryIntegrationTests.java
@@ -15,13 +15,12 @@
*/
package org.springframework.vault.client;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
-
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
+
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.FileSystemResource;
@@ -41,10 +40,13 @@ import org.springframework.vault.util.Settings;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate;
+import static org.assertj.core.api.AssertionsForClassTypes.*;
+
/**
* Integration tests for {@link ClientHttpRequestFactory}.
*
* @author Mark Paluch
+ * @author Ryan Gow
*/
class ClientHttpRequestFactoryFactoryIntegrationTests {
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/config/EnvironmentVaultConfigurationUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/config/EnvironmentVaultConfigurationUnitTests.java
index 97468cb7..266dc5cf 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/config/EnvironmentVaultConfigurationUnitTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/config/EnvironmentVaultConfigurationUnitTests.java
@@ -15,13 +15,12 @@
*/
package org.springframework.vault.config;
-import static org.assertj.core.api.Assertions.assertThat;
-
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -35,10 +34,13 @@ import org.springframework.vault.authentication.TokenAuthentication;
import org.springframework.vault.support.SslConfiguration;
import org.springframework.vault.support.VaultToken;
+import static org.assertj.core.api.Assertions.*;
+
/**
* Unit tests for {@link EnvironmentVaultConfiguration}.
*
* @author Mark Paluch
+ * @author Ryan Gow
*/
@ExtendWith(SpringExtension.class)
@TestPropertySource(properties = { "vault.uri=https://localhost:8123", "vault.token=my-token",
@@ -77,9 +79,9 @@ class EnvironmentVaultConfigurationUnitTests {
Map map = new HashMap();
map.put("vault.ssl.key-store", "classpath:certificate.json");
map.put("vault.ssl.trust-store", "classpath:certificate.json");
- map.put("vault.ssl.enabled-protocols", "TLSv1.2,TLSv1.1");
+ map.put("vault.ssl.enabled-protocols", "TLSv1.2 , TLSv1.1 ");
map.put("vault.ssl.enabled-cipher-suites",
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 , TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
MapPropertySource propertySource = new MapPropertySource("shouldConfigureSsl", map);
this.configurableEnvironment.getPropertySources().addFirst(propertySource);
diff --git a/spring-vault-core/src/test/java/org/springframework/vault/support/SslConfigurationUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/support/SslConfigurationUnitTests.java
index d7447f98..a9475e90 100644
--- a/spring-vault-core/src/test/java/org/springframework/vault/support/SslConfigurationUnitTests.java
+++ b/spring-vault-core/src/test/java/org/springframework/vault/support/SslConfigurationUnitTests.java
@@ -15,19 +15,19 @@
*/
package org.springframework.vault.support;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Arrays;
-
import org.junit.jupiter.api.Test;
+
import org.springframework.core.io.ClassPathResource;
import org.springframework.vault.support.SslConfiguration.KeyStoreConfiguration;
import org.springframework.vault.util.Settings;
+import static org.assertj.core.api.Assertions.*;
+
/**
* Unit tests for {@link SslConfiguration}.
*
* @author Mark Paluch
+ * @author Ryan Gow
*/
class SslConfigurationUnitTests {
@@ -47,8 +47,8 @@ class SslConfigurationUnitTests {
assertThat(sslConfiguration.getKeyStoreConfiguration().isPresent()).isFalse();
assertThat(sslConfiguration.getTrustStoreConfiguration().isPresent()).isFalse();
- assertThat(sslConfiguration.getEnabledCipherSuites()).isNull();
- assertThat(sslConfiguration.getEnabledProtocols()).isNull();
+ assertThat(sslConfiguration.getEnabledCipherSuites()).isEmpty();
+ assertThat(sslConfiguration.getEnabledProtocols()).isEmpty();
}
@Test
@@ -70,13 +70,12 @@ class SslConfigurationUnitTests {
void shouldCreateConfigurationWithEnabledCipherSuites() {
KeyStoreConfiguration keystore = KeyStoreConfiguration.of(new ClassPathResource("certificate.json"));
- SslConfiguration tsConfig = SslConfiguration.unconfigured().withTrustStore(keystore)
- .withEnabledCipherSuites(Arrays.asList(new String[] { "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" }));
+ SslConfiguration tsConfig = SslConfiguration.unconfigured().withTrustStore(keystore).withEnabledCipherSuites(
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
assertThat(tsConfig.getTrustStoreConfiguration()).isSameAs(keystore);
assertThat(tsConfig.getKeyStoreConfiguration().isPresent()).isFalse();
- assertThat(tsConfig.getEnabledCipherSuites().size()).isEqualTo(2);
+ assertThat(tsConfig.getEnabledCipherSuites()).hasSize(2);
assertThat(tsConfig.getEnabledCipherSuites().get(0)).isEqualTo("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384");
assertThat(tsConfig.getEnabledCipherSuites().get(1)).isEqualTo("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
}
@@ -86,11 +85,11 @@ class SslConfigurationUnitTests {
KeyStoreConfiguration keystore = KeyStoreConfiguration.of(new ClassPathResource("certificate.json"));
SslConfiguration tsConfig = SslConfiguration.unconfigured().withTrustStore(keystore)
- .withEnabledProtocols(Arrays.asList(new String[] { "TLSv1.2", "TLSv1.1" }));
+ .withEnabledProtocols("TLSv1.2", "TLSv1.1");
assertThat(tsConfig.getTrustStoreConfiguration()).isSameAs(keystore);
assertThat(tsConfig.getKeyStoreConfiguration().isPresent()).isFalse();
- assertThat(tsConfig.getEnabledProtocols().size()).isEqualTo(2);
+ assertThat(tsConfig.getEnabledProtocols()).hasSize(2);
assertThat(tsConfig.getEnabledProtocols().get(0)).isEqualTo("TLSv1.2");
assertThat(tsConfig.getEnabledProtocols().get(1)).isEqualTo("TLSv1.1");
}
diff --git a/src/main/asciidoc/reference/imperative-template.adoc b/src/main/asciidoc/reference/imperative-template.adoc
index 1aaa2e89..0ed81cbc 100644
--- a/src/main/asciidoc/reference/imperative-template.adoc
+++ b/src/main/asciidoc/reference/imperative-template.adoc
@@ -176,6 +176,8 @@ vault.token=00000000-0000-0000-0000-000000000000
** Truststore resource: `vault.ssl.trust-store` (optional)
** Truststore password: `vault.ssl.trust-store-password` (optional)
** Truststore type: `vault.ssl.trust-store-type` (optional, typically `jks`, supports also `pem`)
+** Enabled SSL/TLS protocols: `vault.ssl.enabled-protocols` (since 2.3.2, optional, protocols separated with comma)
+** Enabled SSL/TLS cipher suites: `vault.ssl.enabled-cipher-suites` (since 2.3.2, optional, cipher suites separated with comma)
* Authentication method: `vault.authentication` (defaults to `TOKEN`, supported authentication methods are: `TOKEN`, `APPID`, `APPROLE`, `AWS_EC2`, `AZURE`, `CERT`, `CUBBYHOLE`, `KUBERNETES`)
**Authentication-specific property keys**