Postgresql in Docker with SSL
Prepare Certificates
mkdir ssl
cd ssl
# ----
DOMAIN="postgres"
DAYS=10000
SUBJ='/C=US/L=DB/O=postgres'
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days ${DAYS} \
-subj "$SUBJ/CN=Root CA" \
-key ca.key \
-out ca.crt
openssl req -newkey rsa:2048 -nodes \
-subj "$SUBJ/CN=*.${DOMAIN}" \
-keyout ${DOMAIN}.key \
-out ${DOMAIN}.csr
openssl x509 -req -days ${DAYS} \
-extfile <(printf "subjectAltName=DNS:${DOMAIN}") \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in ${DOMAIN}.csr \
-out ${DOMAIN}.crt
docker-compose.yaml
services:
postgres:
image: postgres:${TAG_POSTGRES}
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_INITDB_ARGS: "--data-checksums"
ports:
- "127.0.0.1:5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./ssl/postgres.crt:/var/lib/postgresql/server.crt:ro
- ./ssl/postgres.key:/var/lib/postgresql/server.key:ro
- ./ssl/ca.crt:/var/lib/postgresql/ca.crt:ro
command: >
postgres
-c ssl=on
-c ssl_cert_file=/var/lib/postgresql/server.crt
-c ssl_key_file=/var/lib/postgresql/server.key
-c ssl_ca_file=/var/lib/postgresql/ca.crt
volumes:
postgres_data:
.env
Checking
SSL:
DB connect:
❯ psql "host=localhost port=5432 dbname=postgres user=postgres sslmode=require"
Password for user postgres:
psql (17.5, server 17.6)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)
Type "help" for help.
postgres=#
Checking active connections: