Generating Keystores and Truststores: Unique Admin Key

This example demonstrates the generating of a truststore consisting of a CA certificate for the Unique Admin Key model. The corresponding CA key is then used to generate a signed certificate for each NuoDB Admin process. All NuoDB Admin processes will have identical truststores, but each will have a unique keystore consisting of its own CA-signed key pair certificate.

Note: The following commands must be run as a user who has write access to /etc/nuodb/keys.

1. Generate a CA key pair used to sign each admin certificate.

nuocmd create keypair --keystore ca.p12 --store-password "$PASSWD" --ca --dname "CN=ca"

2. Import the CA certificate generated in step 1 into a truststore.

nuocmd import certificate --keystore ca.p12 --store-password "$PASSWD" \
   --truststore nuoadmin-truststore.p12 --truststore-password "$PASSWD"

3. Generate a key pair certificate to be used by NuoDB Command clients.

nuocmd create keypair --keystore nuocmd.p12 --store-password "$PASSWD" --dname "CN=nuocmd"

4. Import the client certificate generated (step 3) into the truststore created (step 2).

nuocmd import certificate --keystore nuocmd.p12 --store-password "$PASSWD" \
   --truststore nuoadmin-truststore.p12 --truststore-password "$PASSWD"

5. Convert the client key and certificate to PEM format so that it can be used by NuoDB Command.

nuocmd show certificate --keystore nuocmd.p12 --store-password "$PASSWD" > nuocmd.pem

6. Convert the CA certificate to PEM format so that it can be used by NuoDB Command.

nuocmd show certificate --keystore ca.p12 --store-password "$PASSWD" --cert-only > ca.cert

7. For every host for admin processes, copy the truststore to the NuoDB config directory, and also make PEM files available on any host that will run NuoDB Command.

cp nuoadmin-truststore.p12 nuocmd.pem ca.cert /etc/nuodb/keys
chown -R nuodb:nuodb /etc/nuodb/keys

8. For every host for admin processes, generate a CA-signed key pair certificate.

Generate the key pair certificate

nuocmd create keypair --keystore nuoadmin.p12 --store-password "$PASSWD" --ca

Sign the certificate with CA key

nuocmd sign certificate --keystore nuoadmin.p12 --store-password "$PASSWD" --update --ca \
   --ca-keystore ca.p12 --ca-store-password "$PASSWD"

Copy the keystore to the config directory

cp nuoadmin.p12 /etc/nuodb/keys
chown nuodb:nuodb /etc/nuodb/keys/nuoadmin.p12

9. For every host for admin processes, update nuoadmin.conf so that the TLS is enabled and the generated certificates files are specified.

...
"ssl": "true",
"keystore": "/etc/nuodb/keys/nuoadmin.p12",
"keystore-type": "PKCS12",
"keystore-password": "<PASSWD value>",
"truststore": "/etc/nuodb/keys/nuoadmin-truststore.p12",
"truststore-type": "PKCS12",
"truststore-password": "<PASSWD value>",
...

10. For every host for admin processes, shut down and restart the admin process so that the configuration changes take effect.

service nuoadmin restart

11. Set the NUOCMD_CLIENT_KEY and NUOCMD_VERIFY_SERVER environment variables to allow NuoDB Command to authenticate itself and verify NuoDB Admin processes using HTTPS.

Set the variables

export NUOCMD_CLIENT_KEY=/etc/nuodb/keys/nuocmd.pem
export NUOCMD_VERIFY_SERVER=/etc/nuodb/keys/ca.cert

Verify that client can communicate with admin

nuocmd show domain

Get the certificate data to verify that TLS is enabled

nuocmd --show-json get certificate-info