diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfiguration.java b/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfiguration.java index 17b53742..0ab56be6 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfiguration.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfiguration.java @@ -63,15 +63,20 @@ public class EncryptionBootstrapConfiguration { @ConditionalOnMissingBean(TextEncryptor.class) public TextEncryptor textEncryptor() { KeyStore keyStore = this.key.getKeyStore(); - if (keyStore.getLocation() != null && keyStore.getLocation().exists()) { - return new RsaSecretEncryptor( - new KeyStoreKeyFactory(keyStore.getLocation(), - keyStore.getPassword().toCharArray()).getKeyPair( - keyStore.getAlias(), - keyStore.getSecret().toCharArray()), - this.key.getRsa().getAlgorithm(), this.key.getRsa().getSalt(), - this.key.getRsa().isStrong()); + if (keyStore.getLocation() != null) { + if (keyStore.getLocation().exists()) { + return new RsaSecretEncryptor( + new KeyStoreKeyFactory(keyStore.getLocation(), + keyStore.getPassword().toCharArray()).getKeyPair( + keyStore.getAlias(), + keyStore.getSecret().toCharArray()), + this.key.getRsa().getAlgorithm(), this.key.getRsa().getSalt(), + this.key.getRsa().isStrong()); + } + + throw new IllegalStateException("Invalid keystore location"); } + return new EncryptorFactory().create(this.key.getKey()); } diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfigurationTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfigurationTests.java index 91d67cdc..5097109e 100644 --- a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfigurationTests.java +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptionBootstrapConfigurationTests.java @@ -1,12 +1,13 @@ package org.springframework.cloud.bootstrap.encrypt; -import static org.junit.Assert.assertEquals; - import org.junit.Test; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.security.crypto.encrypt.TextEncryptor; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + public class EncryptionBootstrapConfigurationTests { @Test @@ -35,4 +36,23 @@ public class EncryptionBootstrapConfigurationTests { context.close(); } + @Test + public void nonExistentKeystoreLocationShouldNotBeAllowed() { + try { + new SpringApplicationBuilder(EncryptionBootstrapConfiguration.class) + .web(false) + .properties("encrypt.key-store.location:classpath:/server.jks1", + "encrypt.key-store.password:letmein", + "encrypt.key-store.alias:mytestkey", + "encrypt.key-store.secret:changeme") + .run(); + assertThat(false) + .as("Should not create an application context with invalid keystore location") + .isTrue(); + } + catch (Exception e) { + assertThat(e).hasRootCauseInstanceOf(IllegalStateException.class); + } + } + }