Class KeyStoreWrapper
- java.lang.Object
-
- org.elasticsearch.common.settings.KeyStoreWrapper
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,SecureSettings
public class KeyStoreWrapper extends java.lang.Object implements SecureSettings
A disk based container for sensitive settings in Elasticsearch. Loading a keystore has 2 phases. First, callload(Path). Then calldecrypt(char[])with the keystore password, or an empty char array ifhasPassword()isfalse. Loading and decrypting should happen in a single thread. Once decrypted, settings may be read in multiple threads.
-
-
Field Summary
Fields Modifier and Type Field Description static Setting<SecureString>SEED_SETTING
-
Method Summary
Modifier and Type Method Description static voidaddBootstrapSeed(KeyStoreWrapper wrapper)Add the bootstrap seed setting, which may be used as a unique, secure, random value by the nodevoidclose()static KeyStoreWrappercreate()Constructs a new keystore with the given password.voiddecrypt(char[] password)Decrypts the underlying keystore data.java.io.InputStreamgetFile(java.lang.String setting)Return a file setting.intgetFormatVersion()Get the metadata format version for the keystorejava.util.Set<java.lang.String>getSettingNames()It is possible to retrieve the setting names even if the keystore is closed.SecureStringgetString(java.lang.String setting)Return a string setting.booleanhasPassword()Return true iff callingdecrypt(char[])requires a non-empty password.booleanisLoaded()Returns true iff the settings are loaded and retrievable.static java.nio.file.PathkeystorePath(java.nio.file.Path configDir)Returns a path representing the ES keystore in the given config dir.static KeyStoreWrapperload(java.nio.file.Path configDir)Loads information about the Elasticsearch keystore from the provided config directory.voidsave(java.nio.file.Path configDir, char[] password)Write the keystore to the given config directory.static voidupgrade(KeyStoreWrapper wrapper, java.nio.file.Path configDir, char[] password)Upgrades the format of the keystore, if necessary.static voidvalidateSettingName(java.lang.String setting)Ensure the given setting name is allowed.
-
-
-
Field Detail
-
SEED_SETTING
public static final Setting<SecureString> SEED_SETTING
-
-
Method Detail
-
getFormatVersion
public int getFormatVersion()
Get the metadata format version for the keystore
-
keystorePath
public static java.nio.file.Path keystorePath(java.nio.file.Path configDir)
Returns a path representing the ES keystore in the given config dir.
-
create
public static KeyStoreWrapper create()
Constructs a new keystore with the given password.
-
addBootstrapSeed
public static void addBootstrapSeed(KeyStoreWrapper wrapper)
Add the bootstrap seed setting, which may be used as a unique, secure, random value by the node
-
load
public static KeyStoreWrapper load(java.nio.file.Path configDir) throws java.io.IOException
Loads information about the Elasticsearch keystore from the provided config directory.decrypt(char[])must be called before reading or writing any entries. Returnsnullif no keystore exists.- Throws:
java.io.IOException
-
upgrade
public static void upgrade(KeyStoreWrapper wrapper, java.nio.file.Path configDir, char[] password) throws java.lang.Exception
Upgrades the format of the keystore, if necessary.- Throws:
java.lang.Exception
-
isLoaded
public boolean isLoaded()
Description copied from interface:SecureSettingsReturns true iff the settings are loaded and retrievable.- Specified by:
isLoadedin interfaceSecureSettings
-
hasPassword
public boolean hasPassword()
Return true iff callingdecrypt(char[])requires a non-empty password.
-
decrypt
public void decrypt(char[] password) throws java.security.GeneralSecurityException, java.io.IOExceptionDecrypts the underlying keystore data. This may only be called once.- Throws:
java.security.GeneralSecurityExceptionjava.io.IOException
-
save
public void save(java.nio.file.Path configDir, char[] password) throws java.lang.ExceptionWrite the keystore to the given config directory.- Throws:
java.lang.Exception
-
getSettingNames
public java.util.Set<java.lang.String> getSettingNames()
It is possible to retrieve the setting names even if the keystore is closed. This allowsSecureSettingto correctly determine that a entry exists even though it cannot be read. Thus attempting to read a secure setting after the keystore is closed will generate a "keystore is closed" exception rather than using the fallback setting.- Specified by:
getSettingNamesin interfaceSecureSettings
-
getString
public SecureString getString(java.lang.String setting)
Description copied from interface:SecureSettingsReturn a string setting. TheSecureStringshould be closed once it is used.- Specified by:
getStringin interfaceSecureSettings
-
getFile
public java.io.InputStream getFile(java.lang.String setting)
Description copied from interface:SecureSettingsReturn a file setting. TheInputStreamshould be closed once it is used.- Specified by:
getFilein interfaceSecureSettings
-
validateSettingName
public static void validateSettingName(java.lang.String setting)
Ensure the given setting name is allowed.- Throws:
java.lang.IllegalArgumentException- if the setting name is not valid
-
close
public void close()
- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein interfaceSecureSettings
-
-