Trong hướng dẫn này tôi sẽ giải thích cách cấu hình PostgreSQL với chứng chỉ SSL được cung cấp bởi Letsencrypt.
Cài đặt certbot
Làm theo hướng dẫn tại https://certbot.eff.org/
Tạo chứng chỉ cho miền của bạn
sudo certbot certonly --standalone -d example.com
Nếu bạn đã có webserver chạy trên máy chủ cơ sở dữ liệu của mình (nginx, apache …) thì hãy thay thế --standalone
bằng --webroot
hoặc một cái gì đó khác theo web server của bạn.
Xác minh chứng chỉ đã tạo
sudo certbot certificates
Tạo Renewal Hook
Tạo tập tin /etc/letsencrypt/renewal-hooks/deploy/postgresql.deploy
#!/bin/bash umask 0177 export DOMAIN=example.com export DATA_DIR=/var/lib/postgresql/ cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem $DATA_DIR/server.crt cp /etc/letsencrypt/live/$DOMAIN/privkey.pem $DATA_DIR/server.key chown postgres:postgres $DATA_DIR/server.crt $DATA_DIR/server.key # only for SELinux - CentOS, Red Hat # chcon -t postgresql_db_t $DATA_DIR/server.crt $DATA_DIR/server.key
Làm cho nó có thể thực thi:
sudo chmod + x /etc/letsencrypt/renewal-hooks/deploy/postgresql.deploy
Cấu hình file postgresql.conf
Tệp postgresql.conf
thường nằm trong thư mục dữ liệu tại /etc/postgresql
, nếu bạn không thể tìm thấy nó, hãy kiểm tra nó với psql: sudo -u postgres psql -U postgres -c ‘SHOW config_file’
Tìm phần SSL và thay đổi các dòng này:
# - SSL - ssl = on ssl_cert_file = '/var/lib/postgresql/server.crt' ssl_key_file = '/var/lib/postgresql/server.key' ssl_prefer_server_ciphers = on
Định cấu hình pg_hba.conf
Tệp pg_hba.conf
nằm trong cùng thư mục postgresql.conf
và chúng ta sẽ cần thêm dòng mới hostssl
. Nếu bạn muốn cho phép tất cả các kết nối từ bên ngoài đến postgres phải dùng ssl thì config như sau:
hostssl all all 0.0.0.0/0 md5
Khởi động lại máy chủ PostgreSQL
# on Ubuntu and Debian: service postgresql restart # CentOS, Fedora and Red Hat systemctl restart postgresql
Thử kết nối
psql -h example.com -U YOUR_USER
Và bạn sẽ thấy một cái gì đó như thế này:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
* SSL compression thường bị vô hiệu hóa do sự cố CRIME trong SSL
Đảm bảo client đã sử dụng SSL
SELECT * from pg_catalog.pg_stat_ssl

Để có được cái nhìn tốt hơn, chúng ta có thể kết hợp với pg_stat_activity
SELECT ssl.pid, usename, datname, ssl, client_addr, backend_type, wait_event FROM pg_catalog.pg_stat_ssl ssl, pg_catalog.pg_stat_activity a WHERE ssl.pid = a.pid

ssl
chỉ ra rằng tất cả các máy khách bên ngoài sử dụng SSLNếu một số client vẫn không sử dụng SSL, hãy thử đặt tham số URL kết nối: sslmode=require
hoặc biến môi trường PGSSLMODE=require