PostgreSQL 启用 SSL
PostgreSQL 提供多种通信安全机制,SSL 是其中一种,类似于网站启用 https。可以配置服务端单向验证,也可以配置服务端和客户端双向验证。
这里记录单向验证的证书配置方法,作用主要是通过加密通道传输数据,防止被中间人抓包窃取。
生成证书
openssl req -new -text -passout pass:abcd -subj /CN=localhost -out server.req -keyout privkey.pem
openssl rsa -in privkey.pem -passin pass:abcd -out server.key
openssl req -x509 -in server.req -text -key server.key -out server.crt
配置证书权限
由于要在 Docker 容器中使用,镜像使用官方维护的 postgres ,容器中运行数据库的用户为 postgres,id 为 999,把证书的所有权赋予该用户。
sudo chown 999 server.key
容器配置
这里使用 Docker Compose 管理容器,docker-compose.yml 内容如下:
services:
postgres:
image: postgres
command: -c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt -c ssl_key_file=/var/lib/postgresql/server.key
restart: unless-stopped
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: 123456
volumes:
- "$PWD/data:/var/lib/postgresql/data"
- "$PWD/server.key:/var/lib/postgresql/server.key"
- "$PWD/server.crt:/var/lib/postgresql/server.crt"
pgadmin4:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: 'user@abc.com'
PGADMIN_DEFAULT_PASSWORD: '654321'
restart: unless-stopped
ports:
- 8080:80
这里通过命令行调整 postgres 的数据库配置,也可以通过配置文件调整。
主要是确保证书映射到容器中,其次是配置文件中要启用 ssl 且证书相关配置的文件路径要正确。