Components
- Postgres image: Postgres container configured with the secure configuration for client authentication.
- certgen.sh script: Generates a custom CA, server, and client certificates using OpenSSL.
- minidebug image: A Minimus dev toolkit that provides a shell, OpenSSL, and other utilities used to generate the certificates.
- psql installed
What this guide demonstrates
- TLS handshake validation
- Server/client certificate trust
- Basic auth and Postgres operations
- Image compatibility
Directory Structure
Deploy Postgres with TLS certificates
Save certgen.sh
Save the following script to a file named
certgen.sh. The script is used to generate the TLS certificates and store them in a certs folder on the host.certgen.sh
Save create-certs.yml
Save the following YAML file to run with Docker Compose. It uses the Minimus minidebug image to generate the certificates with the
certgen.shshell script. Minidebug is a Minimus dev toolkit that provides a shell, OpenSSL, and other utilities.The certificates will be persisted in the certs volume on the host.create-certs.yml
Generate certificates
Run the following to generate the certificates:
TLS certificates
The scriptcertgen.sh generates the following self-signed certificates:- Self-signed CA certificate (
ca.pem) - Server certificates (
server-cert.pem,server-key.pem) with SANs:postgres,localhost,127.0.0.1, and192.168.30.3 - Client certificates for
testuser(client.pem,client-key.pem)
0600 and owned by UID 1000 . Certificate permissions are adjusted to support non-root containers. The certificates will be mounted into the Postgres container.Save custom entrypoint
entrypoint.sh
Save custom HBA
PostgreSQL’s default access rules are defined in the file
pg_hba.conf. Save the following configuration to mount it and customize the Host-Based Authentication rules.pg_hba.conf
Save Docker Compose script
Save the following Docker Compose script to a file named
docker-compose.yml. This script sets up the Postgres service with a healthcheck, mounts a volume with the certificates, the custom entrypoint and the custom HBA config, and maps port 5432.docker-compose.yml