Class KeyStoreWrapper
java.lang.Object
org.elasticsearch.common.settings.KeyStoreWrapper
- All Implemented Interfaces:
Closeable,AutoCloseable,SecureSettings
A disk based container for sensitive settings in Elasticsearch.
Loading a keystore has 2 phases. First, call
load(Path). Then call
decrypt(char[]) with the keystore password, or an empty char array if
hasPassword() is false. Loading and decrypting should happen
in a single thread. Once decrypted, settings may be read in multiple threads.-
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionstatic 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.Return a file setting.intGet the metadata format version for the keystoreIt is possible to retrieve the setting names even if the keystore is closed.byte[]getSHA256Digest(String setting)Returns the SHA256 digest for the setting's value, even after#close()has been called.Return a string setting.booleanReturn true iff callingdecrypt(char[])requires a non-empty password.booleanisLoaded()Returns true iff the settings are loaded and retrievable.static PathkeystorePath(Path configDir)Returns a path representing the ES keystore in the given config dir.static KeyStoreWrapperLoads information about the Elasticsearch keystore from the provided config directory.voidWrite the keystore to the given config directory.static voidupgrade(KeyStoreWrapper wrapper, Path configDir, char[] password)Upgrades the format of the keystore, if necessary.static voidvalidateSettingName(String setting)Ensure the given setting name is allowed.
-
Field Details
-
SEED_SETTING
-
-
Method Details
-
getFormatVersion
public int getFormatVersion()Get the metadata format version for the keystore -
keystorePath
Returns a path representing the ES keystore in the given config dir. -
create
Constructs a new keystore with the given password. -
addBootstrapSeed
Add the bootstrap seed setting, which may be used as a unique, secure, random value by the node -
load
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:
IOException
-
upgrade
public static void upgrade(KeyStoreWrapper wrapper, Path configDir, char[] password) throws ExceptionUpgrades the format of the keystore, if necessary.- Throws:
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
Decrypts the underlying keystore data. This may only be called once.- Throws:
GeneralSecurityExceptionIOException
-
save
Write the keystore to the given config directory.- Throws:
Exception
-
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
Description copied from interface:SecureSettingsReturn a string setting. TheSecureStringshould be closed once it is used.- Specified by:
getStringin interfaceSecureSettings
-
getFile
Description copied from interface:SecureSettingsReturn a file setting. TheInputStreamshould be closed once it is used.- Specified by:
getFilein interfaceSecureSettings
-
getSHA256Digest
Returns the SHA256 digest for the setting's value, even after#close()has been called. The setting must exist. The digest is used to check for value changes without actually storing the value.- Specified by:
getSHA256Digestin interfaceSecureSettings
-
validateSettingName
Ensure the given setting name is allowed.- Throws:
IllegalArgumentException- if the setting name is not valid
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein interfaceSecureSettings
-