|
@@ -5,9 +5,14 @@
|
|
|
*/
|
|
*/
|
|
|
package org.elasticsearch.xpack.core;
|
|
package org.elasticsearch.xpack.core;
|
|
|
|
|
|
|
|
|
|
+import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
import javax.crypto.Cipher;
|
|
import javax.crypto.Cipher;
|
|
|
|
|
+import javax.crypto.SecretKeyFactory;
|
|
|
|
|
|
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
|
|
+
|
|
|
|
|
+import static org.hamcrest.Matchers.containsString;
|
|
|
import static org.hamcrest.Matchers.hasItem;
|
|
import static org.hamcrest.Matchers.hasItem;
|
|
|
import static org.hamcrest.Matchers.not;
|
|
import static org.hamcrest.Matchers.not;
|
|
|
|
|
|
|
@@ -25,4 +30,30 @@ public class XPackSettingsTests extends ESTestCase {
|
|
|
assertThat(XPackSettings.DEFAULT_CIPHERS, not(hasItem("TLS_RSA_WITH_AES_256_CBC_SHA")));
|
|
assertThat(XPackSettings.DEFAULT_CIPHERS, not(hasItem("TLS_RSA_WITH_AES_256_CBC_SHA")));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public void testPasswordHashingAlgorithmSettingValidation() {
|
|
|
|
|
+ final boolean isPBKDF2Available = isSecretkeyFactoryAlgoAvailable("PBKDF2WithHMACSHA512");
|
|
|
|
|
+ final String pbkdf2Algo = randomFrom("PBKDF2_10000", "PBKDF2");
|
|
|
|
|
+ final Settings settings = Settings.builder().put(XPackSettings.PASSWORD_HASHING_ALGORITHM.getKey(), pbkdf2Algo).build();
|
|
|
|
|
+ if (isPBKDF2Available) {
|
|
|
|
|
+ assertEquals(pbkdf2Algo, XPackSettings.PASSWORD_HASHING_ALGORITHM.get(settings));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
|
|
|
|
+ () -> XPackSettings.PASSWORD_HASHING_ALGORITHM.get(settings));
|
|
|
|
|
+ assertThat(e.getMessage(), containsString("Support for PBKDF2WithHMACSHA512 must be available"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ final String bcryptAlgo = randomFrom("BCRYPT", "BCRYPT11");
|
|
|
|
|
+ assertEquals(bcryptAlgo, XPackSettings.PASSWORD_HASHING_ALGORITHM.get(
|
|
|
|
|
+ Settings.builder().put(XPackSettings.PASSWORD_HASHING_ALGORITHM.getKey(), bcryptAlgo).build()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private boolean isSecretkeyFactoryAlgoAvailable(String algorithmId) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ SecretKeyFactory.getInstance(algorithmId);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ } catch (NoSuchAlgorithmException e) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|