PKCS11 Configuration
Depending on institutional or agency policy, private keys may be required to be protected in such a way that the private key is never exposed in unencrypted format unless loaded onto a PKCS11 token such as a NIST certified hardware security module (HSM). Previous and current versions of configuration service can store the private key in an encrypted PKCS12 container, however, this container is decrypted in the configuration service when needed and the private key is present in unecrypted format in process memory of both the configuration service and the gateway. As of version 2.2 of the configuration service, private keys can be store in a “wrapped” format where they are encrypted by a secret key encryption key and never decrypted in the configuration service. As of version 2.1 of the agent, the agent can “unwrap” the private keys into a PKCS11 token and perform signing and decryption operations without the private key ever being decrypted in process memory. As of version 4.1, the gateway can be configured to load and inject an appropriate PKCS11 token implementation into the agent.
Token configuration generally comes in 2 flavors: tokens that leverage the Sun PKCS11 JCE provider implementation and those that provide their own custom JCE provider. The gateway supports both models with a little different configuration for each. HSMs are configured in a file named staMailet.properties in the %james3InstallRoot%/james-server-jpa-guice.lib/properties
Setting Name | Type | Description |
---|---|---|
direct.gateway.keystore.hsmpresent | Boolean | Indicates if a PKCS11 hardware security module (HSM) is used. Default value: false |
direct.gateway.keystore.keyStoreType | String | If an HSM is used, indicates the key store type used. Default value: Luna |
direct.gateway.keystore.keyStoreSourceAsString | String | If an HSM is used, indicates the key source param as a string. Default value: slot:0 |
direct.gateway.keystore.keyStoreProviderName | String | If an HSM is used, indicates the key store provider name. Default value: com.safenetinc.luna.provider.LunaProvider |
direct.gateway.keystore.keyStorePin | String | If an HSM is used, indicates the password used to authenticate. Default value: som3randomp!n |
direct.gateway.keystore.keyStorePassPhraseAlias | String | If an HSM is used, indicates symmetric key name used to decrypt key store entries. Default value: keyStorePassPhrase |
direct.gateway.keystore.privateKeyPassPhraseAlias | String | If an HSM is used, indicates symmetric key name used to decrypt private keys within a key store entry. Default value: privateKeyPassPhrase |
direct.gateway.keystore.keyStorePassPhrase | String | If an HSM is NOT used, passphrase used to decrypt and encrypt key store entires. Default value: H1TBr0s! |
direct.gateway.keystore.privateKeyPassPhrase | String | If an HSM is NOT used, passphrase used to decrypt and encrypt private keys within a key store entires. Default value: H1TCh1ckS! |
direct.gateway.keystore.initOnStart | Boolean | Indicates if the key store manager should self init on startup. Default value: true |
direct.gateway.agent.jceProviderName | String | Indicates the name of the JCE provider used for encryption and signature validation. Default value: BC |
direct.gateway.agent.jceSensitiveProviderName | String | Indicates the name of the JCE provider used for decryption and digital signature generation. If you are using an HSM, this should be set the JCE provider name supplied by your HSM vendor. Default value: BC |