It is possible to use a hardware security module (HSM) or a smart card to store the decryption keys required for decrypting audit trails. An HSM or a smart card is a tamper-resistant physical, software, or cloud solution that can securely store digital keys used for authentication.
The main steps of configuring a hardware security module (HSM) or smart card to integrate with an external indexer are as follows:
- 
Set up and test the environment. 
 - 
Encrypt the PKCS#11 PIN. 
 
To see examples of how to configure various HSM or smart card solutions that you wish to integrate with your external indexer(s), consult the following sections:
Topics:
 
    
To access an HSM or smart card with the external indexer, a PKCS#11 shared library plugin must be used. In most cases, these libraries also need a background daemon or environment variables set. The PKCS#11 library must be accessible to the external indexer with a proper environment.
To set up the environment and test it, complete the following steps.
- 
Load the environment for the indexer commands:
source /etc/indexer/external-indexer.env
 - 
Test your environment.
- 
Option #1: Use the pkcs11-tool to test your environment: 
- 
List the available slots.
pkcs11-tool --modul <path-to-pkcs11-library> -L
 - 
List the objects in a slot.
pkcs11-tool --modul <path-to-pkcs11-library> -l --slot <id> -O
 
 - 
Option #2: Use the indexerworker with the log level set to dump to see the available keys: 
indexerworker -l -v 7 --pkcs11-lib <path-to-pkcs11-library> --pkcs11-slot-id <id> --pkcs11-pin <pin>
 
 - 
Assuming that the environment is ready, the external indexer must be configured to use the PKCS#11 library. To do so, edit /etc/indexer/indexerworker.cfg as follows:
...
"settings": {
  "pkcs11": {
         "custom_password": false
         "slots": [
           {
             "library": "<path-to-pkcs11-library>",
             "slot_id": <slot-number>,
             "pin": "<your-encrypted-PIN>"
           }
         ]
   }
}
... 
 
    
The PKCS#11 PIN(s) must be protected by additional encryption. The indexerconfigcrypter tool must be used to encrypt the PIN(s). 
To encrypt the PIN(s)
- 
Encrypt the PIN.
The PINs can be encrypted with a custom passphrase or a default one is used if no custom passphrase is provided. A custom passphrase is more secure, but interaction is needed to start or restart the external-indexer service. Using a custom passphrase is supported on hosts running CentOS 7 or later.
Issue either of the following commands:
It is possible to configure multiple slots. In that case, the PINs must be encrypted using the same passphrase.
 - 
Update the "pkcs11" object in the indexerworker.cfg file.
The encrypted PINs must be stored in the "pin" field of the configuration file (in the example, a SoftHSM is used):
...
   "pkcs11": {
       "custom_password": true
       "slots": [
         {
           "library": "/usr/lib/softhsm/libsofthsm.so",
           "slot_id": 0,
           "pin": "<your-encrypted-PIN>"
         }
       ]
   }
... 
 
    
When you choose to encrypt the PKCS#11 PIN(s) using a custom password, on starting or restarting the external-indexer service, you are asked to enter your password using a special tool. 
To provide your password using the required tool
- 
Start the external-indexer service:
systemctl start external-indexer
 - 
The external-indexer service prompts you to provide a password using the systemd-ask-password tool. Issue:
systemd-tty-ask-password-agent
 - 
Provide the password at the prompt. You can use multiple agents to enter the password.
 - 
Once the external indexer(s) have been started or restarted, make sure that all the indexers have started up successfully.
For example, on CentOS 7, you can use:
systemctl status external-indexer