Sử dụng SSL (Secure Sockets Layer) để bảo mật kết nối với PostgreSQL là một cách phổ biến để bảo vệ dữ liệu khỏi các cuộc tấn công và đánh cắp thông tin khi truyền tải giữa máy khách (client) và máy chủ (server). Dưới đây là hướng dẫn chi tiết về cách cấu hình và sử dụng SSL để bảo mật kết nối với PostgreSQL.
Nếu chưa có chứng chỉ SSL, bạn có thể tạo một chứng chỉ tự ký (self-signed) hoặc sử dụng chứng chỉ từ một CA (Certificate Authority) đáng tin cậy.
openssl req -new -text -out server.req openssl rsa -in privkey.pem -out server.key openssl req -x509 -in server.req -text -key server.key -out server.crt
server.key
: Khóa riêng của máy chủ.server.crt
: Chứng chỉ của máy chủ.server.req
: Yêu cầu chứng chỉ.Lưu ý: Đảm bảo tệp server.key
có quyền truy cập đúng, chỉ cho phép người dùng PostgreSQL truy cập.
chmod 600 server.key
/var/lib/postgresql/data
hoặc /var/lib/pgsql/data
).postgresql.conf
) và tìm các dòng sau:ssl = on ssl_cert_file = 'server.crt' ssl_key_file = 'server.key'
ssl = on
: Kích hoạt SSL.ssl_cert_file
: Đường dẫn đến chứng chỉ của máy chủ.ssl_key_file
: Đường dẫn đến khóa riêng của máy chủ.Nếu bạn muốn yêu cầu chứng chỉ từ máy khách, thêm cấu hình sau:
ssl_ca_file = 'root.crt'
root.crt
là chứng chỉ của CA được dùng để xác thực các chứng chỉ máy khách.pg_hba.conf
Tệp pg_hba.conf
điều khiển cách PostgreSQL xác thực các kết nối từ xa. Bạn cần chỉnh sửa tệp này để cho phép kết nối qua SSL.
pg_hba.conf
và thêm dòng sau:hostssl all all 0.0.0.0/0 cert clientcert=1
hostssl
: Chỉ cho phép kết nối qua SSL.all all 0.0.0.0/0
: Cho phép tất cả người dùng kết nối từ tất cả các địa chỉ IP.cert
: Sử dụng chứng chỉ để xác thực.clientcert=1
: Yêu cầu chứng chỉ từ máy khách.Sau khi chỉnh sửa cấu hình, khởi động lại dịch vụ PostgreSQL để áp dụng các thay đổi:
sudo systemctl restart postgresql
root.crt
) và chứng chỉ riêng (nếu yêu cầu xác thực máy khách).root.crt
vào thư mục ~/.postgresql/
của người dùng máy khách.cp root.crt ~/.postgresql/ chmod 600 ~/.postgresql/root.crt
Để kết nối đến PostgreSQL qua SSL, bạn có thể sử dụng psql
hoặc bất kỳ ứng dụng máy khách PostgreSQL nào.
psql
với SSL:psql "host=mydbserver.com dbname=mydb user=myuser sslmode=require"
sslmode=require
: Yêu cầu kết nối qua SSL.disable
: Không sử dụng SSL.allow
: Cho phép SSL nếu máy chủ hỗ trợ.prefer
: Ưu tiên SSL nhưng không bắt buộc.require
: Bắt buộc sử dụng SSL.verify-ca
: SSL yêu cầu và kiểm tra chứng chỉ CA.verify-full
: SSL yêu cầu và kiểm tra chứng chỉ CA, đồng thời xác minh tên máy chủ (hostname).Sau khi kết nối qua SSL, bạn có thể kiểm tra xem kết nối có thực sự được bảo mật không bằng cách sử dụng lệnh sau trong psql
:
SELECT ssl_is_used();
t
(true) nghĩa là kết nối đang sử dụng SSL.server.key
) của máy chủ phải được bảo vệ cẩn thận. Chỉ người dùng PostgreSQL mới có quyền truy cập.sslmode=verify-full
để đảm bảo máy khách kiểm tra đầy đủ chứng chỉ máy chủ và xác minh tên miền.Việc cấu hình SSL cho PostgreSQL giúp bảo mật các kết nối giữa máy khách và máy chủ, ngăn chặn các cuộc tấn công như đánh cắp thông tin hoặc tấn công “man-in-the-middle”. Bằng cách sử dụng SSL, bạn có thể mã hóa dữ liệu và đảm bảo rằng thông tin được truyền tải an toàn. Quá trình này bao gồm việc tạo và quản lý các chứng chỉ, điều chỉnh cấu hình máy chủ và máy khách để kích hoạt SSL, cũng như kiểm tra và duy trì bảo mật dữ liệu.