EzSign Properties
The server’s configuration is contained within a properties file. The properties file must be passed to the server (as a parameter) at start up. The server loads the properties and waits for client requests
Essentially the properties file contains information about the IP Addresses and Ports to listen on, the key store location, logging settings and channel configurations. These are contained in a single properties file. The description below breaks out the sections for easier reading
Click here to view a sample properties file
Server Properties
The following settings dictate what ports and interfaces the server listens on and other settings that are relevant to the running server, rather than individual channels
Property | Description | Example |
---|---|---|
server.bindIpAddress | The interface/IP Address the server will bind to. If omitted the server will listen on all available interfaces | 10.100.15.32 |
server.port | The port the server will listen on | 5656 |
server.allowedSourceIpAddresses | A comma separated list of IP Addresses which can connect to the server. If omitted any client can connect | 10.100.15.40,10.100.15.41 |
server.threadPoolSize | The pool size that will be created at start up and used to process requests. If omitted, defaults to 1 | 5 |
server.waitTimeoutIfAllBusy | The maximum time to wait for a thread to become free. If all instances in the thread pool are busy the server will wait this number of milliseconds before returning an error. If omitted, defaults to 1000 (i.e. 1 second) | 1000 |
server.waitForMessageTimeout | The maximum time to wait for a message to be sent following connection. This should be increased if there are connection issues under load. If omitted, defaults to 1000 (i.e. 1 second) | 1000 |
server.logMessages | If false, the received and sent messages will not be logged. If encrypting sensitive data, set this to false to prevent cleartext being sent to the log file. If omitted defaults to true | true |
server.ctrl.bindIpAddress | The interface/IP Address the control server will bind to. If omitted the server will listen on all available interfaces | 127.0.0.1 |
server.ctrl.port | The port the control server will listen on | 5657 |
server.ctrl.allowedSourceIpAddresses | A comma separated list of IP Addresses which can connect to the control server. If omitted no client can connect | 10.100.15.40,10.100.15.41 |
server.ctrl.logStatusMessages | By default the server will log every status request message sent to the control interface. If regular monitoring is in place this can fill logs. Set this value to false to switch off this logging. Defaults to true | true |
server.authCode | The passphrase used to encrypt messages between the client and server. If set the client must pass the same string to the constructor. If not set, messages will be sent in the clear (which may be OK if client and server are on the same machine or using a private network) | x55tHH#ih65W |
keyStoreDir | The folder beneath which all channel key stores will be held | /opt/ezsign/STORE |
log.level | The logging level. The range is from 0 to 4 as follows: 0: Logging is off, 1: Only error messages will be logged, 2: Errors and Warning messages will be logged, 3 : Errors, Warnings and Events will be logged, 4 : This is the debug level - all messages (as well as low level events) will be logged | 4 |
tls.trustStore.filename | If using TLS to communicate with an HSM (such as the payShield) AND you are supplying a custom trust store (containing the trusted CA certificates), this specifies the full path to the trust store file. See payShield TLS Configuration for more details | /opt/stores/payshield.jks |
tls.trustStore.type | This specifies the trust store type referenced above. Options are jks or pkcs12 | jks |
tls.trustStore.password | The encrypted password that protects the trust store referenced above. Use the Management Utility to set this password | yjjWoLfE…Zlew== |
tls.clientKeyStore.filename | If the server is using server-side TLS this is the full path to the keystore file containing the TLS certificate. See Configuring TLS for more details. If using a client TLS certificate to authenticate to a payShield HSM, this is the full path to the keystore file containing the client-authentication certificate. See payShield TLS Configuration for more details. | /opt/stores/client.jks |
tls.clientKeyStore.type | This specifies the trust store type referenced above. Options are jks or pkcs12 | pkcs12 |
tls.clientKeyStore.password | The encrypted password that protects the key store referenced above. Use the Management Utility to set this password | FGchg3Kv…Ycsg== |
Generic Channel Properties
The properties file may have multiple channels specified. Each channel must have a number assigned e.g.
channel.1.name=CHANNEL1
channel.1.type=PKI
...
channel.2.name=CHANNEL2
channel.2.type=SYM
...
channel.3.name=AnotherChannel
...
This number is represented by N
in the following sections. There is no limit on the number of channels
Property | Description | Example |
---|---|---|
channel.N.name | The name of the channel. This will also be used as the folder name where the keys and certificates for this channel will be stored | CHAN1 |
channel.N.type | The channel type: PKI or SYM. PKI channels can perform signature generation and verification SYM (symmetric) channels can perform encryption or decryption | PKI |
channel.N.enabled | If false, the channel is disabled and will not be loaded. If missing, defaults to true | true |
channel.N.tokenType | The token type: SOFTWARE, PKCS11, PAYSHIELD (or HSM9000), GOOGLEKMS, AZUREKEYVAULT | SOFTWARE |
channel.N.token.password | The token password required for all token types and will be used to encrypt key store objects. This must be set by running the ezsign-manange script. If tokenType=PKCS11 this is the PIN or Passphrase. For nCipher devices this will be the operator smartcard passphrase | zijFhJ….vA== |
channel.N.defaultKeyLabel | Relates to symmetric channels only (type=SYM). Specifies the default AES key label to use if none is passed to the client | key1 |
channel.N.saveObjectsToDisk | If this is true, files will not be written to the keystore folder. Use this option if you are passing properties to EzSign and managing key storage externally e.g. in a database | true |
PKCS11 Token Properties
If channel.N.tokenType=PKCS11
is set then the following properties must also be configured. These are specific to the HSM being used and its configuration
Property | Description | Example |
---|---|---|
channel.N.token.useModuleProtection | If an HSM normally requires a password to logon (such as some PKCS#11 tokens). This can be overridden by setting this value to true. This means the HSM will not be logged on to and only the module’s keys will be used (rather than an operator card set etc) | false |
channel.N.token.pkcs11.library | The full path to the PKCS11 library | /opt/nfast/toolkits/p11/ibcknfast.so |
channel.N.token.pkcs11.slot | The PKCS11 slot number | 0 |
channel.N.token.pkcs11.model | The particular HSM model. Options are: Generic, NCipher, Luna, AWSCloudHSM, Utimaco, YubiHSM, Custom | Utimaco |
channel.N.token.pkcs11.customTemplateClass | If the model above is Custom, then the class containing the customised templates must be specified here. See here for more details. Version 4.2.1 onwards | NewHsmTemplates |
GoogleKMS Token Properties
If channel.N.tokenType=GOOGLEKMS
is set then the following properties must also be configured. You will obtain these from your Google KMS configuration
Property | Description | Example |
---|---|---|
channel.N.token.googleKms.project | The ID of the project as created in the Google Cloud Console. For full details on the setup for Google KMS refer to the specific tech note | ezsign |
channel.N.token.googleKms.location | The location of the key ring e.g. europe-west2 | global |
channel.N.token.googleKms.keyRing | The name of the key ring | ezsignkeys |
channel.N.token.googleKms.credentialFile | The JSON file containing the private key associated with the service account with permissions to the KMS | /opt/google/googlekms.json |
channel.N.token.googleKms.jsonCredentialString | The raw JSON text provided as a string (rather than a file as above). Note: supply one of jsonCredentialString or credentialFile. If both are provided credentialFile takes priority | { “type”: “service_account”, “project_id”: “pkcloud”….} |
channel.N.token.googleKms.keyImportVersion | If using imported keys that are not at version 1 set this to the version of the keys you use to be imported | 1 |
Azure KeyVault Token Properties
If channel.N.tokenType=AZUREKEYVAULT
is set then the following properties must also be configured. Refer to your Azure KeyVault configuration for details
Property | Description | Example |
---|---|---|
channel.N.token.azureKeyVault.clientId | The client ID as configured on the Azure platform | eb1739f5-6dd2-43b1-9bf7-266717a24cf4 |
channel.N.token.azureKeyVault.tenantId | The Tenant ID as configured on the Azure platform | d12c3e45-350c-4413-2bb3-34514a35407c |
channel.N.token.azureKeyVault.keyVault | The full DNS name of the Key Vault e.g. https://yourvault.vault.azure.net/ | https://yourvault.vault.azure.net/ |
PayShield Token Properties
If channel.N.tokenType=PAYSHIELD or HSM9000
then the following properties must also be configured.
Note properties named hsm9000 (e.g. channel.N.token.hsm9000.port
) are still supported but all new properties will use the payShield
name.
Property | Description | Example |
---|---|---|
channel.N.token.payShield.ipAddress | The IP Address of the HSM9000 | 10.100.15.101 |
channel.N.token.payShield.port | The port the HSM9000 listens on. Required if tokenType=HSM9000 | 1500 |
channel.N.token.payShield.timeoutMs | The time to wait for a response from the HSM before failing. Required if tokenType=HSM9000 | 3000 |
channel.N.token.payShield.headerLen | The HSM command header length. Required if tokenType=HSM9000 | 4 |
channel.N.token.payShield.useVariantLmk | If the HSM has a variant LMK installed, set this to true. If not specified, defaults to false (meaning a KeyBlock LMK will be used). Ensure this matches against the lmkId and port numbers (that usually map to specific LMKs) | false |
channel.N.token.payShield.lmkId | If the HSM has multiple LMKs loaded, set this to the LMK ID that you wish EzSign to use. Range 0-99. If not specified, the default LMK (as configured on the HSM) will be used | 0 |
channel.N.token.payShield.useTls | Whether communications between the client and HSM are protected using TLS. Options are true or false. If true then the tls server properties must also be set to configure the client key store (and optionally the trust store). See Server Properties above. | false |
Signature Generation and Verification Properties
There are various options when generating and verifying signatures. The following settings also dictate what algorithms, key-sizes etc. that will be used when CSRs are generated
Property | Description | Example |
---|---|---|
channel.N.signature.algorithm | The signature key algorithm. Possible values are: RSA and ECDSA. If RSA is chosen the keysize must also be specified. If elliptic curve (ECDSA) is chosen the curve must also be specified. See here for more details | RSA |
channel.N.signature.keySize | The RSA key (modulus) size in bits (1024, 2048, 4096, 8192, 16384, 32768 | 2048 |
channel.N.signature.ecc.curve | The named curve e.g. secp192r1, secp224r1, secp256r1, secp384r1, secp521r1 or any name supported by the version of java or HSM being used | secp256r1 |
channel.N.signature.hash | The hash that will be generated over the data to be signed before signing. Possible values: SHA1, SHA256, SHA512, SHA3-224, SHA3-256, SHA3-384, SHA3-512 | SHA256 |
channel.N.signature.type | The signature type to generate. Options are: PKCS7, RAW. If RAW is chosen the signature will be PKCS#1 formatted if RSA is chosen | PKCS7 |
channel.N.signature.includeCerts | What certificates to include in the signature. Possible values: ALL – all certificates including the root will be included, ALLEXCEPTROOT – all certificates except the root will be included, SIGNERONLY – only the signer certificate will be included | ALLEXCEPTROOT |
channel.N.signature.includeContent | Whether to include the content with the signature or not | false |
channel.N.signature.includeSignedAttribs | If true signed attributes will be included in the signature including signing time, message digest and content type | true |
channel.N.signature.keyId | The key which will be used to generate the signature. This can be set by running the ezsign-manange script | 15723e16cd89401 |
channel.N.verify.pathCheckClass | To override the default path checker with a custom version, specify the path checker class here. This must be in the classpath. If omitted the default path check class is used | org.pathcheck.PathChecker |
channel.N.verify.signedAttribsRequired | If true and signed attributes are not included in a signature being verified the signature will be rejected | true |
channel.N.verify.denyWeakSignatureHash | If true, signatures will be rejected if they have not been generated with a SHA-2 or SHA-3 hash | false |
channel.N.verify.denyWeakCertificateHash | If true, certificates will be rejected if they have not been generated with a SHA-2 or SHA-3 hash | false |
channel.N.verify.relaxRootCertExtensionChecks | If true, none of the usual certificate extension checks will be performed on the root certificate (including, key usage, basic constraints or key size). Defaults to false | false |
channel.N.verify.relaxAllCertExtensionChecks | If true, none of the usual certificate extension checks will be performed including key usage criticality, basic constraints or key size. Defaults to false | false |
channel.N.verify.nonRepudiationRequired | If true, a signer certificate must have the non-repudiation key usage set. Defaults to true | true |
channel.N.verify.caBasicConstraintsRequired | If true, a CA certificate must have basic constraints CA extension. Defaults to true | true |
channel.N.verify.minKeySize | Sets the minimum permitted key size for all certificates in the chain. Defaults to 1024 | 2048 |
channel.N.verify.maxKeySize | Sets the maximum permitted key size for all certificates in the chain. Defaults to 8192 | 8192 |
channel.N.allowExpiredCerts | Whether to permit expired certificates. This MUST only be set to true in extreme circumstances (such as to maintain a live service) where other checks can be performed that ensure the certificate would otherwise still be valid | false |
channel.N.allowExpiredCertsForDays | If allow ExpiredCerts=true then the number of days permitted to all an expired certificate for e.g. if set to 5 a certificate will be permitted for 5 days after it has expired | 5 |
Revocation Checker Properties
The revocation check options are configured with the following settings. If nothing is specified, no revocation checking will be performed
Property | Description | Example |
---|---|---|
channel.N.revocationChecker.type | The revocation checker type. Possible values: NONE - No revocation checking will be performed. CRL - CRLs will be used to check revocation. OCSP - OCSP will be used to check revocation. ANY - OCSP will be tried first. If this fails (e.g. if there is no OCSP URL or if the server or status is unavailable) then CRL will be attempted | OCSP |
If NONE is chosen as the revocation checker, no further settings are required
If CRL is chosen, refer to the CRL Specific Properties below
If OCSP is chosen, refer to the OCSP Specific Properties below
If ANY is chosen, both the CRL and OCSP specific properties will be applied
OCSP Specific Properties
if revocationChecker.type=OCSP
then the following settings can be applied
Property | Description | Example |
---|---|---|
channel.N.revocationChecker.ocsp. connectTimeoutSecs | If revocationChecker.type=OCSP then this determines the OCSP Server connection timeout. Defaults to 5 seconds | 5 |
channel.N.revocationChecker.ocsp. readTimeoutSecs | If revocationChecker.type=OCSP then this determines the OCSP Server read timeout. Defaults to 5 seconds | 5 |
channel.N.revocationChecker.ocsp.useDefaultUrl | If revocationChecker.type=OCSP then this determines whether the default URL (which must be specified) will always be used or, if false, the certificate’s AIA extensions will be used to extract the OCSP URL | true |
channel.N.revocationChecker.ocsp.defaultUrl | If useDefaultUrl is true the default URL must be specified in this property | https://ocsp.server.com |
channel.N.revocationChecker.ocsp.signRequest | If true, the OCSP request will also be signed | true |
channel.N.revocationChecker.ocsp.signingKeyId | if signRequest=true. The signing key used to sign the OCSP requests. This is set to the same key as the signature signing key | 15723e16cd89401 |
channel.N.revocationChecker.ocsp.signatureHash | The hash used in the OCSP request signature generation. Used when signRequest=true. Possible values: SHA1, SHA224, SHA256, SHA384, SHA512 | SHA256 |
channel.N.revocationChecker.ocsp.checkOcspSigningCertUsage | Whether to check the key usage on the certificate used to sign the OCSP response. If true, the certificate’s extended key usage will be checked for the ocsp-signing attribute | false |
channel.N.revocationChecker.ocsp.maxProducedAtAgeMins | Revocation checking will fail if the time the OCSP was generated (indicated in the producedAt field) is more than this number of minutes in the past i.e. this is the maximum lifetime allowed for an OCSP response. If omitted this will not be checked | 4 |
channel.N.revocationChecker.ocsp.onlyCheckEndEntity | If this is true, only the end-entity certificate will be checked for revocation i.e. none of the other certificates in the path (nor any OCSP signing certificates) will be checked | false |
channel.N.revocationChecker.ocsp.relaxSigningPath | RFC 6960 requires that the issuer of the certificate being checked sign the OCSP request or this is performed by a certificate that it has issued. If the response is signed by another trusted certificate (e.g. a root CA issued certificate – as is often the case for IdenTrust responders), set this option to true | false |
channel.N.revocationChecker.ocsp.ignoreSSLErrors | If true, when sending an OCSP request, if SSL/TLS is used and the SSL certificate is not specifically trusted, setting this to true will still permit the connection | false |
channel.N.revocationChecker.ocsp.enableCache | Enable or disable OCSP response caching. Default is false | true |
channel.N.revocationChecker.ocsp.cacheSeconds | If enableCache is true, this is the maximum time to cache an OCSP response in seconds. Default is 120 | 60 |
channel.N.revocationChecker.ocsp.cacheCaCertsOnly | If true, only OCSP responses for CA certs will be cached i.e. end entities will always be checked. Default is true | true |
channel.N.revocationChecker.ocsp.useProxy | Whether to send OCSP requests via a proxy. If true the other proxy settings are required | true |
channel.N.revocationChecker.ocsp.proxyServer | If useProxy=true, this specifies the proxy server address | proxyserver |
channel.N.revocationChecker.ocsp.proxyPort | If useProxy=true, this specifies the proxy server port | 8080 |
channel.N.revocationChecker.ocsp.proxyAuthRequired | If useProxy=true and the server requires authentication set this to true and specify the username and password below | false |
channel.N.revocationChecker.ocsp.proxyUsername | If proxyAuthRequired=true set the username here | user1 |
channel.N.revocationChecker.ocsp.proxyPassword | If proxyAuthRequired=true set the password here | password |
CRL Specific Properties
if revocationChecker.type=CRL
then the following settings can be applied
Property | Description | Example |
---|---|---|
channel.N.revocationChecker.crl.downloadFolder | The location to which CRL files will be downloaded and stored | /opt/ezsign/crl |
channel.N.revocationChecker.crl.forceDownload | Whether to force the download of the CRL for each request. | false |
channel.N.revocationChecker.crl.allowExpiredCrl | Whether to allow expired CRLs or not Note: This MUST only be used in extreme circumstances e.g. a live service outage as a revoked certificate may be accepted | false |
channel.N.revocationChecker.crl.allowExpiredCrlForDays | If allowExpiredCrl=true then the number of days expiry that will be permitted | 1 |
channel.N.revocationChecker.crl.onlyCheckEndEntity | If this is true, only the end-entity certificate will be checked for revocation i.e. none of the other certificates in the path will be checked | false |
channel.N.revocationChecker.crl.ignoreSSLErrors | If true, when sending an OCSP request, if SSL/TLS is used and the SSL certificate is not specifically trusted, setting this to true will still permit the connection | true |
channel.N.revocationChecker.crl.useProxy | Whether to download CRLs via a proxy. If true the other proxy settings are required | false |
channel.N.revocationChecker.crl.proxyServer | If useProxy=true, this specifies the proxy server address | proxyserver |
channel.N.revocationChecker.crl.proxyPort | If useProxy=true, this specifies the proxy server port | 8080 |
channel.N.revocationChecker.crl.proxyAuthRequired | If useProxy=true and the server requires authentication set this to true and specify the username and password below | true |
channel.N.revocationChecker.crl.proxyUsername | If proxyAuthRequired=true set the username here | user2 |
channel.N.revocationChecker.crl.proxyPassword | If proxyAuthRequired=true set the password here | password1 |