The Vault HSM auto-unseal and Seal Wrap features require Vault Enterprise with the Governance and Policy Module.
- Download Vault.
- Install Vault.
- Configure Systemd.
- Configure Vault settings.
- Start the Vault server.
- Enable and test the Seal Wrap feature.
- Enable and test the Entropy Augmentation feature.
Download Vault
Download precompiled Vault binaries at https://releases.hashicorp.com/vault/. You can download Vault Enterprise binaries by following the instructions made available to HashiCorp Vault customers. This integration requires the Enterprise HSM binary. You can use this for testing and find it at the following link: https://releases.hashicorp.com/vault/1.7.2+ent.hsm/Install Vault
Perform the following steps to install Vault:Give Vault the ability to use the mlock syscall without running the process as root. The
mlock syscall prevents the system from swapping memory to disk.Shell
Configure Systemd
Systemd uses documented sane defaults (www.freedesktop.org/software/systemd/man/systemd.directives.html), so you must set only non-default values in the configuration file.Configure Vault settings
This section shows you how to perform the following tasks:- Configure Vault
- Configure Auto-unseal and Entropy Augementation.
Configure Vault
Vault uses documented sane defaults, so you must set only non-default values in the configuration file.Configure HSM Auto-unseal and Entropy Augmentation
When you start a Vault server, it normally starts in a sealed state where you need a quorum of existing unseal keys to unseal it. By integrating Vault with an HSM, you can set the Vault server to be automatically unsealed by the trusted HSM key provider. To integrate the Vault Enterprise server with an HSM cluster, the configuration file must define the PKCS11 seal stanza (www.vaultproject.io/docs/configuration/seal/pkcs11.html) providing necessary connection information, as shown in the following example: Example:vault.hcl
Text
This guide sets the storage backend to the local file system,
/tmp/vault, to make the verification step easy.| Parameter | Description |
|---|---|
| lib | Path to the PKCS #11 library on the machine where Vault Enterprise is installed. |
| slot | The slot number to use (this should be set to 0 because that is the default slot in the FXPKCS11 config file). |
| key_label | Defines the label of the key to use. |
| hmac_key_label | Defines the label of the key to use for HMACing. |
| generate_key | If no existing key with the label specified by key_label exists at Vault initialization time, Vault generates a key. |
For this integration, the generate\key parameter needs to be set to true so that Vault automatically creates the encryption keys that it uses for the Seal Wrap functionality on the HSM. The values set for the key\label and hmac\key\label parameters correspond with the special key label defines that must be set in the
<CONFIG> section of the fxpkcs11.cfg fileStart the Vault Server
This section shows you haw to perform the following tasks:- Start Vault
- Initialize Vault
- Access the Vault UI
Start Vault
Perform the following steps to start Vault:Set the PKCS #11 PIN for login with the following command. For the value of VAULT_HSM_PIN, use the password of the identity created on the HSM and defined in the FXPKCS11 config file.
Shell
You can also set the PKCS #11 PIN in the Vault configuration file (
vault.hcl) with the pin parameter, but we don’t recommend this in a production setting. Best practice is to specify the PIN with the VAULT\HSM\PIN environment variable, as shown here. This prevents the password from being exposed if the config file is compromised or you store it in an insecure location. If set through the environment variable, Vault obfuscates the environment variable after reading it. The one caveat is that you must reset the VAULT\HSM\PIN environment variable if you restart the Vault.Now, start the Vault server with the following command.
Shell
If this command is successful, you should see output similar to the following example:
Shell
Initialize Vault
Perform the following steps to initialize Vault:Access the Vault UI
Perform the following steps to access the Vault UI:Go to http://localhost:8200 in a web browser.
Enable and test the Seal Wrap feature
To enable and test the Seal Wrap feature, perform the tasks in this section.Enable Seal Wrap
To enable Seal Wrap, choose the appropriate method and perform the instructions:Use the CLI command
Perform the following steps to use the CLI command method to enable Seal Wrap:To compare seal-wrapped data against unwrapped data, enable key/value v1 secrets engine at two different paths: Enable k/v v1 with seal wrap. To do so, use the -seal-wrap flag when you enable the KV workflow.To enable seal wrap, pass the -seal-wrap flag when you enable a secrets engine.
kv-unwrapped and kv-seal-wrapped.Enable k/v v1 without seal wrap at kv-unwrapped.Shell
Shell
Use the Web UI
Perform the following steps to use the Web UI method to enable Seal Wrap:Open a web browser and launch the Vault UI (for example,
http://127.0.0.1:8200/ui) and then log in.Enter kv-seal-wrapped in the path field, expand Method Options, select the Seal Wrap checkbox, and select [ Enable Engine ].
Test the Seal Wrap feature
To test the Seal Wrap feature, perform the following tasks:- Test the feature
- View the encrypted secrets
Test the feature
To test the Seal Wrap feature, choose the appropriate method and follow the instructions:Use the CLI command
Perform the following steps to use the CLI command method to enable Seal Wrap:Use the Web UI
Perform the following steps to use the Web UI method to test Seal Wrap:Enter the following information:
- In Path for this secret, enter
unwrapped. - In Secret key, enter
password. - In Value, enter
my-longpassword.
Repeat the same step for kv-seal-wrapped to write the same secret at the
kv-seal-wrapped/wrapped path.View the encrypted secrets
To view the encrypted secrets, choose the appropriate method and follow the instructions:The following examples assume the Vault server is configured to use the local file system (
/tmp/vault) as its storage backend:None
Use the CLI command
Perform the following steps to use the CLI command method to view the encrypted secrets:SSH into the machine where the Vault server is running, and check the stored values in the
/tmp/vault directory.Shell
In the
/tmp/vault/logical directory, there are two sub-directories. One maps to kv-unwrapped/ and another maps to kv-seal-wrapped/ although you cannot tell by the folder names.View the secret at rest. One of the directories maps to kv-unwrapped/unwrapped.Example:Shell
Use the Web UI
Perform the following steps to use the Web UI method to view the encrypted secrets:SSH into the machine where the Vault server is running, and check the stored values in the
/tmp/vault directory.Shell
Under the
/tmp/vault/logical directory, there are two sub-directories. One maps to kv-unwrapped/ and another maps to kv-seal-wrapped/ although you cannot tell by the folder names.View the secret at rest. One of the directories maps to kv-unwrapped/unwrapped.Example:Shell
Enable and test the Entropy Augmentation feature
To leverage the external entropy source, set the external_entropy_access parameter to true when you enable a secrets engine or auth method. This step shows how to enable an external entropy source on a transit secrets engine.You must enable the Entropy Augmentation feature through the CLI. At this time, we do not support enabling Entropy Augmentation through the Web UI.
Execute the following command to enable the transit secrets engine with an external entropy source by using the -external-entropy-access flag.
Shell
List the enabled secrets engine with -detailed flag.Notice that the External Entropy Access is set to true for transit/.
Shell
You can start using the transit secrets engine to encrypt your sensitive data, which leverages the HSM as its external entropy source. Regardless, the user experience remains the same as before.Example:1. Create a new encryption key named: orders.2. Send a base64-encoded string to be encrypted by Vault.3. Now, test to verify that you can decrypt:4. Decode to get the original data:
Shell
Shell
Shell
Shell
When the external entropy access is enabled, the connectivity to the HSM is required. If the HSM becomes unreachable for any reason, the transit secrets engine fails to generate new keys or rotate the existing keys.
Shell

