Thiết lập SSL cho PostgreSQL giúp mã hóa dữ liệu khi truyền qua mạng giữa client và server, tăng cường tính bảo mật. Dưới đây là các bước chi tiết để cấu hình SSL cho PostgreSQL.
Trước tiên, bạn cần tạo chứng chỉ SSL cho máy chủ PostgreSQL. Điều này có thể thực hiện bằng cách sử dụng OpenSSL.
Mở terminal và chạy các lệnh sau để tạo khóa riêng (server.key
) và chứng chỉ tự ký (server.crt
):
# Tạo khóa riêng (private key) openssl genrsa -des3 -out server.key 2048 # Tạo chứng chỉ yêu cầu (Certificate Signing Request - CSR) openssl req -new -key server.key -out server.csr # Xóa mật khẩu khỏi khóa để PostgreSQL có thể khởi động mà không cần mật khẩu cp server.key server.key.org openssl rsa -in server.key.org -out server.key # Tạo chứng chỉ tự ký có hiệu lực trong 365 ngày openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Đảm bảo rằng chỉ có người dùng PostgreSQL có quyền truy cập vào các tệp này:
chmod 600 server.key chmod 600 server.crt
Di chuyển server.crt
và server.key
vào thư mục cấu hình PostgreSQL. Thông thường, đó là thư mục /var/lib/postgresql/data
hoặc /etc/postgresql/<version>/main/
trên hệ điều hành Linux.
sudo mv server.crt /var/lib/postgresql/data/ sudo mv server.key /var/lib/postgresql/data/
postgresql.conf
Mở tệp cấu hình PostgreSQL và bật SSL:
ssl = on ssl_cert_file = 'server.crt' ssl_key_file = 'server.key'
pg_hba.conf
Tệp pg_hba.conf
điều khiển các phương thức xác thực cho các kết nối đến PostgreSQL. Cập nhật tệp này để bắt buộc sử dụng SSL cho các kết nối:
# Sử dụng SSL cho kết nối từ xa hostssl all all 0.0.0.0/0 md5 hostssl all all ::/0 md5
Sau khi cấu hình xong, khởi động lại PostgreSQL để các thay đổi có hiệu lực:
sudo systemctl restart postgresql
Để kiểm tra liệu kết nối có sử dụng SSL hay không, bạn có thể sử dụng lệnh psql
:
psql "sslmode=require host= dbname= user= password="
Khi kết nối thành công, bạn có thể chạy lệnh sau trong psql để kiểm tra trạng thái SSL:
SHOW ssl;
Nếu SSL được bật, PostgreSQL sẽ trả về kết quả:
ssl ----- on
Khi kết nối từ các ứng dụng (như Python, Node.js), bạn cần chắc chắn rằng tùy chọn sslmode=require
được đặt trong chuỗi kết nối.
Ví dụ, với Python sử dụng thư viện psycopg2
:
import psycopg2 conn = psycopg2.connect( dbname="mydb", user="myuser", password="mypassword", host="myhost", sslmode="require" )
Với Node.js sử dụng module pg
:
const { Pool } = require('pg'); const pool = new Pool({ user: 'myuser', host: 'myhost', database: 'mydb', password: 'mypassword', port: 5432, ssl: { rejectUnauthorized: false } });
Với các bước trên, bạn sẽ thiết lập thành công SSL cho PostgreSQL, đảm bảo dữ liệu truyền giữa client và server được mã hóa, bảo mật hơn khi hoạt động trên các mạng không tin cậy.