PostgreSQLCó hỗ trợ gốc để sử dụngPostgresql: TàKết nối để mã hóa giao tiếp tỷ lệ kèo bóng đá khách/tỷ lệ kèo bóng đá chủ để tăng bảo mật. Nhìn thấyPhần 18.9Để biết chi tiết về phía tỷ lệ kèo bóng đá chủtỷ lệ kèo bóng đáchức năng.
libpqĐọc toàn hệ thốngOpenSSLTệp cấu hình. Theo mặc định, tệp này được đặt tênopenSSL.cnf
và nằm trong thư mục được báo cáo bởiPhiên bản OpenSSL -D
. Mặc định này có thể được ghi đè bằng cách đặt biến môi trườngopenSSL_conf
với tên của tệp cấu hình mong muốn.
Theo mặc định,PostgreSQLsẽ không thực hiện bất kỳ xác minh nào của chứng chỉ tỷ lệ kèo bóng đá chủ. Điều này có nghĩa là có thể giả mạo danh tính tỷ lệ kèo bóng đá chủ (ví dụ bằng cách sửa đổi bản ghi DNS hoặc bằng cách tiếp quản địa chỉ IP của tỷ lệ kèo bóng đá chủ) mà không cần khách hàng biết.CA) Chứng chỉ trên một tỷ lệ kèo bóng đá tính và chứng chỉ láĐã kýbằng chứng chỉ gốc trên tỷ lệ kèo bóng đá tính khác. Nó cũng có thể sử dụng mộtHồiTrung cấpHồitỷ lệ kèo bóng đá chỉ được ký bởi tỷ lệ kèo bóng đá chỉ gốc và tỷ lệ kèo bóng đá chỉ Lá có dấu.
Để cho phép tỷ lệ kèo bóng đá khách xác minh danh tính của tỷ lệ kèo bóng đá chủ, đặt chứng chỉ gốc lên tỷ lệ kèo bóng đá khách và chứng chỉ lá được ký bởi chứng chỉ gốc trên tỷ lệ kèo bóng đá chủ. Để cho phép tỷ lệ kèo bóng đá chủ xác minh danh tính của tỷ lệ kèo bóng đá khách, hãy đặt chứng chỉ gốc trên tỷ lệ kèo bóng đá chủ và chứng chỉ lá được ký bởi chứng chỉ gốc trên tỷ lệ kèo bóng đá khách.
Một khi một chuỗi niềm tin đã được thiết lập, có hai cách để khách hàng xác nhận chứng chỉ lá được gửi bởi tỷ lệ kèo bóng đá chủ. Nếu tham sốSSLMode
được đặt thànhXác minh-CA
, LibPQ sẽ xác minh rằng tỷ lệ kèo bóng đá chủ đáng tin cậy bằng cách kiểm tra chuỗi chứng chỉ cho đến chứng chỉ gốc được lưu trữ trên tỷ lệ kèo bóng đá khách. Nếu nhưSSLMode
được đặt thànhxác minh-đầy đủ
, libpq sẽcũngXác minh rằng tên máy chủ máy chủ khớp với tên được lưu trong chứng chỉ máy chủ. Kết nối tỷ lệ kèo bóng đá sẽ không thành công nếu chứng chỉ máy chủ không thể được xác minh.xác minh-đầy đủ
được khuyến nghị trong hầu hết các môi trường nhạy cảm với bảo mật.
inxác minh-đầy đủ
Chế độ, tên tỷ lệ kèo bóng đá chủ được khớp với (các) thuộc tính tên thay thế của chứng chỉ hoặc đối với thuộc tính tên chung nếu không có tên thay thế nào của loạidnsname
có mặt. Nếu thuộc tính tên của tỷ lệ kèo bóng đá chỉ bắt đầu bằng dấu hoa thị (*
), Asterisk sẽ được coi là ký tự đại diện, sẽ phù hợp với tất cả các ký tựngoại trừA DOT (.
). Điều này có nghĩa là tỷ lệ kèo bóng đá chỉ sẽ không phù hợp với tên miền phụ.
Để cho phép xác minh chứng chỉ tỷ lệ kèo bóng đá chủ, một hoặc nhiều chứng chỉ gốc phải được đặt trong tệp~/.Postgresql/root.crt
Trong thư mục nhà của người dùng. (Trên Microsoft Windows, tệp được đặt tên%appdata%\ postgresql \ root.crt
.) Chứng chỉ trung gian cũng nên được thêm vào tệp nếu cần liên kết chuỗi chứng chỉ được gửi bởi tỷ lệ kèo bóng đá chủ với chứng chỉ gốc được lưu trữ trên tỷ lệ kèo bóng đá khách.
Các mục nhập Revocation (CRL) tỷ lệ kèo bóng đá chỉ cũng được kiểm tra nếu tệp~/.Postgresql/root.crl
tồn tại (%appdata%\ postgresql \ root.crl
trên Microsoft Windows).
Vị trí của tệp tỷ lệ kèo bóng đá chỉ gốc và CRL có thể được thay đổi bằng cách đặt các tham số kết nốiSSLROOTCERT
vàSSLCRL
hoặc các biến môi trườngPGSSLROOTCERT
vàPGSSLCRL
.
Để tương thích ngược với các phiên bản trước của PostgreSQL, nếu một tệp Ca gốc tồn tại, hành vi củaSSLMode
=Yêu cầu
sẽ giống nhưXác minh-CA
, có nghĩa là chứng chỉ tỷ lệ kèo bóng đá chủ được xác nhận đối với ca. Dựa vào hành vi này không được khuyến khích và các ứng dụng cần xác thực chứng chỉ phải luôn luôn sử dụngXác minh-CA
hoặcxác minh-đầy đủ
.
Nếu tỷ lệ kèo bóng đá chủ cố gắng xác minh danh tính của tỷ lệ kèo bóng đá khách bằng cách yêu cầu chứng chỉ lá của tỷ lệ kèo bóng đá khách,libpqSẽ gửi (các) tỷ lệ kèo bóng đá chỉ được lưu trữ trong tệp~/.Postgresql/postgresql.crt
Trong thư mục nhà của người dùng. Các chứng chỉ phải chuỗi chứng nhận gốc do tỷ lệ kèo bóng đá chủ tin tưởng.~/.Postgresql/postgresql.key
cũng phải có mặt. Trên Microsoft Windows, các tệp này được đặt tên%appdata%\ postgresql \ postgresql.crt
và%appdata%\ postgresql \ postgresql.key
. Vị trí của tỷ lệ kèo bóng đá chỉ và tệp khóa có thể được ghi đè bởi các tham số kết nốiSSLCERT
vàSSLKey
hoặc theo các biến môi trườngPGSSLCERT
vàPGSSLKey
.
Trên các hệ thống Unix, các quyền trên tệp khóa riêng phải không cho phép bất kỳ quyền truy cập nào vào thế giới hoặc nhóm; đạt được điều này bằng một lệnh nhưChmod 0600 ~/.Postgresql/postgresql.key
. Ngoài ra, tệp có thể được sở hữu bởi root và có quyền truy cập đọc nhóm (nghĩa là0640
Quyền). Thiết lập đó được dành cho các cài đặt trong đó tỷ lệ kèo bóng đá chỉ và các tệp khóa được quản lý bởi hệ điều hành.libpqSau đó, nên được tạo thành một thành viên của nhóm có quyền truy cập vào các tệp tỷ lệ kèo bóng đá chỉ và khóa chính đó. (Trên Microsoft Windows, không có kiểm tra quyền tệp, vì%appdata%\ postgresql
Thư mục được cho là an toàn.)
tỷ lệ kèo bóng đá chỉ đầu tiên trongPostgreSql.Crt
18440_18524HồiTrung cấpChứng chỉ có thể được sử dụng tùy chọn vào tệp - Làm như vậy tránh yêu cầu lưu trữ chứng chỉ trung gian trên tỷ lệ kèo bóng đá chủ (SSL_CA_FILE).
Để biết hướng dẫn tạo tỷ lệ kèo bóng đá chỉ, xemPhần 18.9.5.
Các giá trị khác nhau choSSLMode
Tham số cung cấp các mức bảo vệ khác nhau. tỷ lệ kèo bóng đá có thể cung cấp bảo vệ chống lại ba loại tấn công:
Nếu bên thứ ba có thể kiểm tra lưu lượng mạng giữa tỷ lệ kèo bóng đá khách và tỷ lệ kèo bóng đá chủ, nó có thể đọc cả thông tin kết nối (bao gồm tên người dùng và mật khẩu) và dữ liệu được truyền.tỷ lệ kèo bóng đásử dụng mã hóa để ngăn chặn điều này.
Nếu bên thứ ba có thể sửa đổi dữ liệu trong khi truyền giữa tỷ lệ kèo bóng đá khách và tỷ lệ kèo bóng đá chủ, nó có thể giả vờ là tỷ lệ kèo bóng đá chủ và do đó xem và sửa đổi dữ liệuNgay cả khi nó được mã hóa. Bên thứ ba sau đó có thể chuyển tiếp thông tin và dữ liệu kết nối đến tỷ lệ kèo bóng đá chủ ban đầu, khiến không thể phát hiện cuộc tấn công này.tỷ lệ kèo bóng đáSử dụng xác minh chứng chỉ để ngăn chặn điều này, bằng cách xác thực tỷ lệ kèo bóng đá chủ cho tỷ lệ kèo bóng đá khách.
Nếu bên thứ ba có thể giả vờ là một khách hàng được ủy quyền, thì chỉ cần truy cập dữ liệu mà nó không nên có quyền truy cập. Thông thường, điều này có thể xảy ra thông qua quản lý mật khẩu không an toàn.tỷ lệ kèo bóng đáSử dụng chứng chỉ tỷ lệ kèo bóng đá khách để ngăn chặn điều này, bằng cách đảm bảo rằng chỉ có chủ chứng chỉ hợp lệ mới có thể truy cập tỷ lệ kèo bóng đá chủ.
Để kết nối được biết đến an toàn, việc sử dụng tỷ lệ kèo bóng đá phải được cấu hình trênCả tỷ lệ kèo bóng đá khách và tỷ lệ kèo bóng đá chủTrước khi kết nối được thực hiện. Nếu nó chỉ được cấu hình trên tỷ lệ kèo bóng đá chủ, tỷ lệ kèo bóng đá khách có thể sẽ gửi thông tin nhạy cảm (ví dụ: mật khẩu) trước khi biết rằng tỷ lệ kèo bóng đá chủ yêu cầu bảo mật cao.SSLMode
tham số đếnxác minh-đầy đủ
hoặcXác minh-CA
, và cung cấp cho hệ thống một tỷ lệ kèo bóng đá chỉ gốc để xác minh chống lại. Điều này tương tự như sử dụnghttps
urlđể duyệt web được mã hóa.
Một khi tỷ lệ kèo bóng đá chủ đã được xác thực, tỷ lệ kèo bóng đá khách có thể truyền dữ liệu nhạy cảm. Điều này có nghĩa là cho đến thời điểm này, tỷ lệ kèo bóng đá khách không cần biết liệu chứng chỉ sẽ được sử dụng để xác thực, giúp việc chỉ định rằng chỉ trong cấu hình tỷ lệ kèo bóng đá chủ.
tất cảtỷ lệ kèo bóng đáTùy chọn mang theo đầu dưới dạng mã hóa và trao đổi khóa, do đó, có một sự đánh đổi phải được thực hiện giữa hiệu suất và bảo mật.Bảng 34.1Minh họa các rủi ro khác nhauSSLMode
Giá trị bảo vệ chống lại và câu nói nào họ đưa ra về bảo mật và chi phí.
Bảng 34.1. Mô tả chế độ tỷ lệ kèo bóng đá
SSLMode |
Bảo vệ không có lỗi | MITMBảo vệ | câu lệnh |
---|---|---|---|
vô hiệu hóa |
Không | không | Tôi không quan tâm đến bảo mật và tôi không muốn trả chi phí mã hóa. |
Cho phép |
có thể | Không | Tôi không quan tâm đến bảo mật, nhưng tôi sẽ trả chi phí mã hóa nếu tỷ lệ kèo bóng đá chủ nhấn mạnh vào nó. |
ưa thích |
có thể | Không | Tôi không quan tâm đến mã hóa, nhưng tôi muốn trả chi phí mã hóa nếu tỷ lệ kèo bóng đá chủ hỗ trợ nó. |
Yêu cầu |
Có | không | Tôi muốn dữ liệu của mình được mã hóa và tôi chấp nhận chi phí. Tôi tin rằng mạng sẽ đảm bảo tôi luôn kết nối với tỷ lệ kèo bóng đá chủ tôi muốn. |
Xác minh-CA |
Có | phụ thuộc vào chính sách CA | Tôi muốn dữ liệu của mình được mã hóa và tôi chấp nhận chi phí. Tôi muốn chắc chắn rằng tôi kết nối với một tỷ lệ kèo bóng đá chủ mà tôi tin tưởng. |
xác minh-đầy đủ |
Có | Có | Tôi muốn dữ liệu của mình được mã hóa và tôi chấp nhận chi phí. Tôi muốn chắc chắn rằng tôi kết nối với một tỷ lệ kèo bóng đá chủ mà tôi tin tưởng và đó là cái tôi chỉ định. |
Sự khác biệt giữaXác minh-CA
vàxác minh-đầy đủ
phụ thuộc vào chính sách của gốcCA. Nếu một công khaiCAđược sử dụng,Xác minh-CA
Cho phép kết nối với tỷ lệ kèo bóng đá chủAi đó khácCó thể đã đăng ký vớiCA. Trong trường hợp này,xác minh-đầy đủ
Không nên luôn luôn được sử dụng. Nếu một địa phươngCAđược sử dụng hoặc thậm chí là tỷ lệ kèo bóng đá chỉ tự ký, sử dụngXác minh-CA
thường cung cấp đủ bảo vệ.
Giá trị mặc định choSSLMode
làưa thích
. Như được hiển thị trong bảng, điều này không có ý nghĩa gì từ quan điểm bảo mật và nó chỉ hứa hẹn hiệu suất chi phí nếu có thể.
Bảng 34.2Tóm tắt các tệp có liên quan đến thiết lập tỷ lệ kèo bóng đá trên máy khách.
Bảng 34.2. LIBPQ/CLIENT tỷ lệ kèo bóng đá sử dụng tệp
FILE | Nội dung | Hiệu ứng |
---|---|---|
~/.Postgresql/postgresql.crt |
Chứng chỉ tỷ lệ kèo bóng đá khách | Đã gửi đến tỷ lệ kèo bóng đá chủ |
~/.Postgresql/postgresql.key |
khóa riêng của tỷ lệ kèo bóng đá khách | tỷ lệ kèo bóng đá minh tỷ lệ kèo bóng đá chỉ khách hàng được gửi bởi chủ sở hữu; không cho biết chủ sở hữu tỷ lệ kèo bóng đá chỉ là đáng tin cậy |
~/.Postgresql/root.crt |
Cơ quan tỷ lệ kèo bóng đá chỉ đáng tin cậy | Kiểm tra xem chứng chỉ tỷ lệ kèo bóng đá chủ có được ký bởi cơ quan chứng chỉ đáng tin cậy |
~/.Postgresql/root.crl |
tỷ lệ kèo bóng đá chỉ bị thu hồi bởi cơ quan tỷ lệ kèo bóng đá chỉ | Chứng chỉ tỷ lệ kèo bóng đá chủ không được có trong danh sách này |
Nếu ứng dụng của bạn khởi tạolibssl
và/hoặclibcrypto
Thư viện vàlibpqđược xây dựng vớitỷ lệ kèo bóng đáHỗ trợ, bạn nên gọipqinitopenssl
để nóilibpqrằngLIBSSL
và/hoặclibcrypto
Thư viện đã được ứng dụng của bạn khởi tạo, đểlibpqcũng sẽ không khởi tạo các thư viện đó. Tuy nhiên, điều này là không cần thiết khi sử dụngOpenSSLPhiên bản 1.1.0 trở lên, vì khởi tạo trùng lặp không còn là vấn đề.
pqinitopenssl
Cho phép các ứng dụng chọn thư viện bảo mật nào để khởi tạo.
29598_29648
KhiDO_SSL
là không,libpqSẽ khởi tạoOpenSSLThư viện trước khi mở kết nối cơ sở dữ liệu. KhiDO_CRYPTO
là khác không,libcrypto
Thư viện sẽ được khởi tạo. Theo mặc định (nếupqinitopenssl
không được gọi), cả hai thư viện đều được khởi tạo. Khi hỗ trợ tỷ lệ kèo bóng đá không được biên dịch, chức năng này có mặt nhưng không làm gì cả.
Nếu ứng dụng của bạn sử dụng và khởi tạoOpenSSLhoặc cơ bản của nólibcrypto
Thư viện, bạnphảiGọi chức năng này với số 0 cho (các) tham số thích hợp trước khi mở kết nối cơ sở dữ liệu lần đầu tiên. Ngoài ra, hãy chắc chắn rằng bạn đã thực hiện khởi tạo đó trước khi mở kết nối cơ sở dữ liệu.
pqinitssl
Cho phép các ứng dụng chọn thư viện bảo mật nào để khởi tạo.
void pqinitssl (int do_ssl);
Hàm này tương đương vớipqinitopenssl (do_ssl, do_ssl)
. Nó đủ cho các ứng dụng khởi tạo cả hoặc khôngOpenSSLvàlibcrypto
.
pqinitssl
đã có mặt từPostgreSQL8.0, trong khipqinitopenssl
đã được thêm vàoPostgreSQL8.4, vì vậypqinitssl
có thể thích hợp hơn cho các ứng dụng cần làm việc với các phiên bản cũ hơn củalibpq.