How to Use a Signed SSL Certificate with Philter

Describes how to use a signed SSL certificate with Philter.

When Philter is deployed via the AWS Marketplace, Windows Azure Marketplace or other third-party cloud marketplace, SSL will already be enabled via a self-signed certificate. It is recommended you replace this self-signed certificate with a valid certificate issued to your organization by a trusted authority. The instructions for how to do this are described below.

First, create a private key and a certificate signing request (CSR) for Philter on your domain. In this walkthrough we are using the domain philter.yourdomain.com as an example.

openssl req -new -newkey rsa:2048 -nodes -keyout philter_yourdomain_com.key -out philter_youdomain_com.csr

Submit the CSR to your SSL certificate vendor of choice and complete the SSL certificate ordering process. If prompted for a web server during the process, select Apache or Nginx. Once the process is complete and the certificate is issued you will receive a few files. The files you will need are summarized in the table below. The file names may vary and you may also receive other files as well.

File Name

Description

Creator

philter_yourdomain_com.csr

Certificate signing request

Created by you

philter_yourdomain_com.key

Certificate private key

Created by you

philter_yourdomain_com.ca-bundle

Intermediate certificates provided by the issuing authority

Received from SSL authority

philter_yourdomain_com.crt

The SSL certificate for philter.yourdomain.com

Received from SSL authority

When prompted for a keystore password we will use changeit. It's recommended you use a more secure password.

The first thing to do is to convert the certificate and the private key to PKCS12 format in philter.p12:

openssl pkcs12 -export -in philter_yourdomain_com.crt -inkey philter_yourdomain_com.key -name philter -out philter.p12

Now import the P12 file into a keystore philter.jks:

keytool -importkeystore -deststorepass changeit -destkeystore philter.jks -srckeystore philter.p12 -srcstoretype PKCS12

Add the intermediate certificate provided by the issuing authority to the keystore:

keytool -import -alias intermediate -trustcacerts -file philter_yourdomain.com.ca-bundle -keystore philter.jks

Update Philter's settings in application.properties:

# SSL certificate settings
server.ssl.key-store-type=JKS
server.ssl.key-store=/path/to/philter.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=philter

Restart Philter:

sudo systemctl restart philter

Execute an API status request to verify Philter is running as expected. With the -v option we can see the details of the SSL certificate:

curl -v https://philter.yourdomain.com:8080/api/status

Look in the response for details of the certificate. Our domain was philter.mtnfog.dev:

* Server certificate:
* subject: CN=philter.mtnfog.dev
* start date: Apr 21 00:00:00 2020 GMT
* expire date: Apr 21 23:59:59 2021 GMT
* subjectAltName: host "philter.mtnfog.dev" matched cert's "philter.mtnfog.dev"
* issuer: C=GB; ST=Greater Manchester; L=Salford; O=Sectigo Limited; CN=Sectigo RSA Domain Validation Secure Server CA
* SSL certificate verify ok.