Setting up Local Encryption Keys
Use dsetool createsystemkey to generate local encryption/decryption key files.
To change an encryption key, see Rekeying existing data.
Setting up local encryption keys for production environments
After installing DSE, create a local encryption key file, distribute it to the same location on all nodes in the cluster, and update the system_key_directory
and config_encryption_key_name properties in dse.yaml.
The location of the dse.yaml file depends on the type of installation:
-
Package installations:
/etc/dse/dse.yaml -
Tarball installations:
<installation_location>/resources/dse/conf/dse.yaml-
To ensure support for all encryption algorithms, enable
JCE.Starting in
JDK 8u161,JCE Unlimitedis enabled by default. Refer to the Release Notes for JDK 8u161. -
If the directory does not exist, create the
/confdirectory based on your DataStax Enterprise (DSE) installation type:
-
-
Package installation:
/etc/dse/conf -
Tarball installation:
<installation_location>/resources/dse/conf-
Configure the file name and the location of the encryption key in the
dse.yamlfile:-
Set
system_key_directoryproperty to the path where you want to store the encryption keys:system_key_directory: /etc/dse/conf -
Change the directory owner to the DSE account and ensure that the DSE account has read/write permissions.
-
Set the
config_encryption_key_nameto the expected key name. Encryption key files can have any valid Unix name. The default name issystem_key.config_encryption_key_name: system_key
-
-
Go to the
system_key_directory:cd /etc/dse/conf -
Create an encryption key using the
dsetool createsystemkeycommand:dsetool createsystemkey 'AES/ECB/PKCS5Padding' 128 KEY_NAMEReplace
KEY_NAMEwith the name of the key file to create, as set in thedse.yamlfile. If no file name is specified, the key file is namedsystem_key.- cipher_algorithm[/mode/padding]
-
DSE supports the following JCE cipher algorithms and corresponding
length:-
AES/CBC/PKCS5Padding: Valid withlength128, 192, or 256. The default isAES/CBC/PKCS5Paddingwithlength128. -
AES/ECB/PKCS5Padding: Valid withlength128, 192, or 256. -
DES/CBC/PKCS5Padding: Valid withlength56. -
DESede/CBC/PKCS5Padding: Valid withlength112 or 168. -
Blowfish/CBC/PKCS5Padding: Valid withlength32-448. -
RC2/CBC/PKCS5Padding: Valid withlength40-128.
-
If
config_encryption_activeis set totrueindse.yaml, a warning is generated, but the system key still successfully generates. -
Copy the key file to all other nodes in the cluster. On all nodes, put keys in the same directory (path and name).
-
Update the
system_key_directoryandconfig_encryption_key_nameindse.yaml.dsetoolreads current values from thedse.yaml. A restart is not required in order to continue setting up encryption. -
Ensure that the DSE account owns the key files and has read/write access on them. If necessary, change the ownership of the file to the DSE user.
chown cassandra /etc/dse/conf/system_key
-
Setting up local encryption keys to embed in installation package for development environments
You can create a local encryption or decryption key file that can be embedded in a distribution (tarball). In development environments this distribution package can then be used by other users. This strategy is especially helpful when using scripts with IT automation tools such as Ansible.
|
The current user must have write permission to the directory where you want to generate the key files. |
-
Specify the key file output directory when you create the encryption key with the
dsetool createsystemkeycommand:For example:
dsetool createsystemkey 'AES/ECB/PKCS5Padding' 128 -d /home/jane/keysResult: A key file
/home/jane/keys/system_keyis created. -
In the distribution tarball, create a directory for the
system keyfile. Use the default location (/etc/dse/conf) or add a new location. -
Locate the
dse.yamlconfiguration file. The location of this file depends on the type of installation:-
Package installations:
/etc/dse/dse.yaml -
Tarball installations:
<installation_location>/resources/dse/conf/dse.yaml
-
-
If you used a new location, then update the
system_key_directoryproperty indse.yamlas appropriate.