How to Modify Java KeyStore in Docker documentation for the dotCMS Content Management System

This page shows to use a modified Java KeyStore file in a dotCMS Docker container without having to build a custom Docker image.

We use docker-compose in this example but this can be applied in other container deployments like kubernetes. The Java KeyStore file is a repository of security certificates that allows dotCMS to make secure connections to remote servers that use valid SSL/TLS certificates. It may be necessary to add additional certificates to the default Java KeyStore - most commonly when dotCMS needs to connect to LDAP servers or to HTTPS api servers that use self-signed certificates. Specify the dotCMS release in docker-compose.yml rather than use “latest,” as the included KeyStore file can change when dotCMS releases new Docker images.

services:
    dotcms:
        image: dotcms/dotcms:21.09
        environment:
        CMS_HEAP_SIZE: '8g'
        ...
    volumes:
        - cms-shared:/data/shared
        ... 

Copy the default Java KeyStore file from a running container:

mkdir keystore

docker cp {container_id}:/etc/ssl/certs/java/cacerts keystore/cacerts

Add custom cert(s) to the copied KeyStore file using the default password “changeit” Give it a descriptive alias to be nice to future admins, then verify its presence:

keytool -import -trustcacerts -storepass changeit -file /PATH/TO/SELF-SIGNED-CERT.cer -alias doctms-SELF-SIGNED-CERT-YYYY -keystore keystore/cacert

keytool -storepass changeit -list -rfc -keystore keystore/cacerts | grep dotcms

To use the custom KeyStore in `docker-compose.yml`, mount the updated KeyStore file; also specify the custom KeyStore path in `JAVA_OPTS`:

environment:
CMS_JAVA_OPTS: '... -Djavax.net.ssl.trustStore=/srv/custom_keystore/cacerts -Djavax.net.ssl.trustStorePassword=changeit'
CMS_HEAP_SIZE: '8g'

volumes:
- /path/to/keystore/cacerts:/srv/custom_keystore/cacerts
- cms-shared:/data/shared

In a clustered environment, distribute the updated KeyStore file to all dotCMS nodes.