...
Key Concepts
Certificate and PKI concepts
These instructions use the following terms:
- Key: A unique string of characters that seeds a mathematical algorithm for encryption and decryption. Keys come in pairs. A public key encrypts data to be decrypted with the corresponding private key.
- Certificate: A file that contains a public key and identifies who owns that key and its corresponding private key. In a signed certificate, a trusted certificate authority (CA) affirms that a public key does indeed belong to the owner named in the certificate. A certificate chain links a public key to a widely trusted root certificate.
- Keystore: A file that holds a combination of keys and certificates.
- PKCS, PFX: A binary format for key, certificate, and keystore files. Typical file names are *.pkcs, *.p12, *.p7b, *.pfx
- Java keystore: The binary format for keystores used by Code42 servers. Typical file names are .keystore and *.jks
- PEM: An ASCII text format for keys and certificates. Typical file extensions are *.pem, *.key, *.csr, *.cert. The binary counterpart is DER-format file. An X.509 certificate may or may not be in PEM format.
To identify a PEM file, read it with a console or text editor. If you see ASCII text, it's a PEM file.
Java Keytool Management
The Java keytool installs as part of a system's Java runtime engine (JRE) and runs at the Windows or Linux command line. To use keytool, install it on your system and configure its use as described below.
Windows keytool install
- Download and install a recent version of the JRE from Oracle.
- Locate the keytool with two commands.
The second command returns the location of keytool.exe.cd \
dir /b/s keytool.exe - Add the directory where keytool.exe resides to the PATH variable.
PATH=%PATH%;<directoryWhereKeytool.exeResides>
For example:PATH=%PATH%;C:\Program Files\Java\jre1.8.0_111\bin
- Return to a directory that belongs to your user name:
cd \Users\<yourusername>
- Repeat steps 2 and 3 for any terminal window in which you want to use the
keytool
command.
Linux keytool install
Install a recent version of the JRE with commands like the following:sudo apt-get update
sudo apt-get install default-jre
Create a keystore
Create a keystore using one of the following options:
- Option 1: Create a new key and Java keystore; import a CA's signature.
- Option 2: Package existing PEM-format keys and certificates in a new Java keystore.
- Option 3: Convert an existing PKCS or PFX keystore to a Java keystore.
Option 1: Create a new key and Java keystore; import a CA's signature
Step 1: Create a keystore and a signing request
Create a Java keystore and a request for a CA to sign your public key.
- Create the keystore with the command below, after substituting your value for one variable:
- <your.domain.com>: the complete domain name of your Code42 server.
The command will prompt you for two passwords. Supply the same value for both of them:
Enter keystore password:
Enter key password:
keytool -genkeypair -alias <your.domain.com> -storetype jks -keystore <your.domain.com>.jks -validity 366 -keyalg RSA -keysize 4096
- The command prompts you for identifying data.
At "What is your first and last name" you must supply the domain name of the Code42 server you want to secure.
Most CAs require values for the other fields as well.
What is your first and last name? <your.domain.com> What is the name of your organizational unit? yourunit What is the name of your organization? yourorg What is the name of your City or Locality? yourcity What is the name of your State or Province? yourstate What is the two-letter country code for this unit? US
- Create the certificate signing request (CSR) with the command below, after substituting your value for all four occurrences of one variable:
- <your.domain.com>: the complete domain name of your Code42 server.
keytool -certreq -alias <your.domain.com> -file <your.domain.com>.csr
-keystore <your.domain.com>.jks -ext san=dns:<your.domain.com>
Step 2: Request a CA-signed certificate
- In the directory where you ran Step 1 above, find the file <your.domain.com>.csr
- Submit the file <your.domain.com>.csr to your CA.
- Details vary from one CA to another. Typically, you submit your request via a website, then the CA contacts you to verify your identity.
- CAs can send signed reply files in a variety of formats, and CAs use a variety of names for those formats. You want the CA's reply in PEM or PKCS#7 format.
- Wait (usually days or a week) for the CA's reply.
Step 3: Import the CA's reply
The CA's reply will provide one PKCS file or multiple PEM files. Import them into your keystore as follows:
- Copy the CA's files into the directory where you created the keystore in Step 1 above.
- Windows only: Configure the Keytool Command as described above.
- Use
keytool
to import the CA reply files to your keystore
(The commands will prompt you for your keystore password):
- If the CA sent a PKCS file, use the command below, after substituting your values for two variables:
- <your.domain.com> : The complete domain name of your Code42 server.
- <CAreply.pkcs> : The name of the PKCS file provided by the CA.
keytool -importcert -alias <your.domain.com> -file <CAreply.pkcs> -keystore <your.domain.com>.jks -trustcacerts
- If the CA sent PEM files, there may be one file, but most often there are two or three. Import the files to your keystore with commands in the order shown below, after substituting your values for four variables:
- <root.cert.pem> : The name of the root certificate file
- <intermediate.cert.pem> : The name of the intermediate certificate file
The root and intermediate files link the CA's signature to a widely trusted root certificate that is known to web browsers. Most, but not all, CA replies include roots and intermediates. - <your.domain.com> : The complete domain name of your Code42 server
- <server.cert.pem> : The name of the server certificate file
The file links your domain name with your public key and the CA's signature.
keytool -importcert -alias root -file <root.cert.pem> -keystore <your.domain.com>.jks -trustcacerts
keytool -importcert -alias intermediate -file <intermediate.cert.pem> -keystore <your.domain.com>.jks -trustcacerts
keytool -importcert -alias intermediat2 -file <intermediat2.cert.pem> -keystore <your.domain.com>.jks -trustcacerts
keytool -importcert -alias <your.domain.com> -file <server.cert.pem> -keystore <your.domain.com>.jks -trustcacerts
If you import certificates in the wrong order, the above commands return an error message. To resolve the error, you can:
- Consult your CA.
- Re-arrange the order of certificates and try again.
- Read each certificate with the following command:
keytool -printcert -file <filename.cert.pem>
In the output, note the Owner and Issuer (signer) of each certificate. Order your import commands so that the Issuer of each certificate matches the Owner in the previous command.
- Proceed to configuring your Code42 server below.
Option 2: Package existing PEM-format key and certificates in a new Java keystore
If you have an existing private key and certificates for your Code42 server's domain, in PEM format, importing them into a Java keystore requires the OpenSSL tool. OpenSSL can package the PEM files in a PKCS keystore. Java keytool can then convert the PKCS keystore to a Java keystore.
- Install OpenSSL:
- Windows: Download and install OpenSSL.
- Linux: Verify that OpenSSL is installed by issuing the command
openssl version
If that returns an error, install OpenSSL with a command likesudo apt-get install openssl
- Gather your private key, server certificate, and intermediate certificate into one directory.
- Package the key and certificates into a PKCS keystore with the command below, after substituting your values for four variables
(The command will prompt you for your keystore password):- <server.cert.pem>: The name of the server certificate file
The file links your domain name with your public key and CA's signature. - <private.key.pem>: The private counterpart to the public key in <server.cert.pem>
- <intermediate.cert.pem>: The name of the intermediate certificate file
The file links the CA's signature to a widely trusted root certificate that is known to web browsers. - <your.domain.com> : The complete domain name of your Code42 server
- <server.cert.pem>: The name of the server certificate file
openssl pkcs12 -export -in <server.cert.pem> -inkey <private.key.pem> -certfile <intermediate.cert.pem> -name "<your.domain.com>" -out <your.domain.com>.p12
- Convert the resulting PKCS keystore file, <your.domain.com>.p12 into a Java keystore. See Option 3, below.
Option 3: Convert an existing PKCS or PFX keystore to a Java keystore
If you have an existing PKCS or PFX keystore for your Code42 server's domain, convert it to a Java keystore.
- Windows only: Configure the keytool command as described above.
- Issue the command below, after substituting your values for two variables
(The command will prompt you for keystore passwords):- <your.domain.com.p12> : The existing keystore file.
- <your.domain.com> : The complete domain name of your Code42 server
keytool -importkeystore -srckeystore <your.domain.com.p12> -srcstoretype PKCS12 -destkeystore <your.domain.com>.jks -deststoretype jks
- Proceed to configuring your Code42 server below.
Configure your server to use your keystore
Step 1: Back up your Code42 server's database
As a best practice, back up your Code42 server's database:
- Open the administration console.
- Navigate to Settings > Server.
- From the action menu, select Dump Database.
Step 2: Import your keystore to your Code42 server
- In the administration console, select Settings > Security > Keys.
- At SSL, check Require SSL to access console.
- Click Import Keystore.
- Select your Java keytore file, <your.domain.com>.jks, and provide
<yourpassword>
. - Return to the system command line and stop and restart the Code42 server:
Certificate Use Cases
Client and Server SSL encryption of messages using PKI concept
...