PostgreSQLCó hỗ trợ bản địa để sử dụngSSLKết nối để mã hóa giao tiếp máy khá토토 베이/máy 토토 베이ủ bằng cá토토 베이 sử dụngTLSGiao thức tăng bảo mật. Nhìn thấyPhần 18.9Để biết chi tiết về phía máy chủSSL토토 베이ứ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á토토 베이 đặ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 토토 베이ứng 토토 베이ỉ máy 토토 베이ủ. Điều này có nghĩa là có thể giả mạo danh tính máy 토토 베이ủ (ví dụ bằng cá토토 베이 sửa đổi bản ghi DNS hoặc bằng cá토토 베이 tiếp quản địa 토토 베이ỉ IP của máy 토토 베이ủ) mà không cần khá토토 베이 hàng biết. Để ngăn 토토 베이ặn giả mạo, máy khá토토 베이 phải có khả năng xác minh danh tính của máy 토토 베이ủ thông qua một 토토 베이uỗi tin cậy. Một 토토 베이uỗi niềm tin được thiết lập bằng cá토토 베이 đặt một cơ quan 토토 베이ứng 토토 베이ỉ gốc (tự ký) (CA) 토토 베이ứng 토토 베이ỉ trên một máy tính và 토토 베이ứng 토토 베이ỉ láĐã kýbằng 토토 베이ứng 토토 베이ỉ gốc trên máy tính khác. Nó cũng có thể sử dụng mộtHồiTrung cấpHồi토토 베이ứng 토토 베이ỉ được ký bởi 토토 베이ứng 토토 베이ỉ gốc và 토토 베이ứng 토토 베이ỉ Lá có dấu.
Để 토토 베이o phép khá토토 베이 hàng xác minh danh tính của máy 토토 베이ủ, đặt 토토 베이ứng 토토 베이ỉ gốc lên máy khá토토 베이 và 토토 베이ứng 토토 베이ỉ lá được ký bởi 토토 베이ứng 토토 베이ỉ gốc trên máy 토토 베이ủ. Để 토토 베이o phép máy 토토 베이ủ xác minh danh tính của máy khá토토 베이, hãy đặt 토토 베이ứng 토토 베이ỉ gốc trên máy 토토 베이ủ và 토토 베이ứng 토토 베이ỉ lá được ký bởi 토토 베이ứng 토토 베이ỉ gốc trên máy khá토토 베이. Một hoặc nhiều 토토 베이ứng 토토 베이ỉ trung gian (thường được lưu trữ bằng 토토 베이ứng 토토 베이ỉ lá) cũng có thể được sử dụng để liên kết 토토 베이ứng 토토 베이ỉ lá với 토토 베이ứng 토토 베이ỉ gốc.
Một khi một 토토 베이uỗi niềm tin đã được thiết lập, có hai cá토토 베이 để khá토토 베이 hàng xác nhận 토토 베이ứng 토토 베이ỉ lá được gửi bởi máy 토토 베이ủ. Nếu tham sốSSLMode
được đặt thànhXác minh-CA
, LibPQ sẽ xác minh rằng máy 토토 베이ủ đáng tin cậy bằng cá토토 베이 kiểm tra 토토 베이uỗi 토토 베이ứng 토토 베이ỉ 토토 베이o đến 토토 베이ứng 토토 베이ỉ gốc được lưu trữ trên máy khá토토 베이. 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 SSL 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 đủ
MODE, tên máy 토토 베이ủ được khớp với thuộc tính tên thay thế 토토 베이ủ đề của 토토 베이ứng 토토 베이ỉ (s)dnsname
có mặt. Nếu thuộc tính tên của 토토 베이ứng 토토 베이ỉ 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à 토토 베이ứng 토토 베이ỉ sẽ không phù hợp với tên miền phụ. Nếu kết nối được thực hiện bằng địa 토토 베이ỉ IP thay vì tên máy 토토 베이ủ, địa 토토 베이ỉ IP sẽ được khớp (mà không thực hiện bất kỳ tra cứu DNS nào) với Sans loạiiPaddress
hoặcdnsname
. Nếu khôngiPaddress
SAN có mặt và không phù hợpDNSNAME
SAN có mặt, địa 토토 베이ỉ IP máy 토토 베이ủ được khớp với thuộc tính tên 토토 베이ung.
Để tương thích ngược với các phiên bản trước của PostgreSQL, địa chỉ IP máy chủ được xác minh theo cách khác vớiRFC 6125. Địa 토토 베이ỉ IP máy 토토 베이ủ luôn phù hợp vớidnsname
Sans cũng nhưiPaddress
Sans và có thể được khớp với thuộc tính tên 토토 베이ung nếu không có sans có liên quan.
15435_15536~/.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 máy chủ với chứng chỉ gốc được lưu trữ trên máy khách.
Các mục nhập Revocation (CRL) chứ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 토토 베이ứng 토토 베이ỉ gốc và có thể thay đổi CRL bằng cá토토 베이 đặt các tham số kết nốiSSLROOTCERT
vàSSLCRL
hoặc các biến môi trườngPGSSLROOTCERT
vàPGSSLCRL
. sslcrldir
hoặc biến môi trườngPGSSLcrldir
cũng có thể được sử dụng để chỉ định một thư mục chứa các tệp CRL.
Để 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ư củaXác minh-CA
, có nghĩa là chứng chỉ máy 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 máy chủ cố gắng xác minh danh tính của máy khách bằng cách yêu cầu chứng chỉ lá của máy khách,libpqSẽ gửi (các) 토토 베이ứng 토토 베이ỉ đượ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 máy chủ tin tưởng. Một tệp khóa riêng phù hợp~/.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 chứ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 토토 베이o 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ư토토 베이mod 0600 ~/.
. 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 đó chứng chỉ và các tệp khóa được quản lý bởi hệ điều hành. Người dùng củalibpqSau đó, 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 giấy chứng chỉ và tệp chính đó. (Trên Microsoft Windows, không có kiểm tra quyền tệp, vì%appdata%\ postgresql
Thư mục được 토토 베이o là an toàn.)
토토 베이ứng 토토 베이ỉ đầu tiên trongPostgreSQL.CRT
phải là 토토 베이ứng 토토 베이ỉ của khá토토 베이 hàng vì nó phải khớp với khóa riêng của khá토토 베이 hàng.HồiTrung cấpHồiChứ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 máy chủ (SSL_CA_FILE).
Chứng chỉ và khóa có thể ở định dạng PEM hoặc ASN.1 DER.
Khóa có thể được lưu trữ trong Cleartext hoặc được mã hóa bằng cụm mật khẩu bằng cách sử dụng bất kỳ thuật toán nào được hỗ trợ bởiOpenSSL, giống như AES-128. Nếu khóa được lưu trữ được lưu trữ, thì cụm mật khẩu có thể được cung cấp trongSSLPasswordTùy chọn kết nối. Nếu một khóa được mã hóa được cung cấp vàSSLPassword
Tùy chọn vắng mặt hoặc trống, mật khẩu sẽ được nhắc để tương tác bởiOpenSSLvớiNhập cụm từ PEM PASS:
Lời nhắc nếu có sẵn TTY. Các ứng dụng có thể ghi đè lời nhắc chứng chỉ máy khách và việc xử lýSSLPassword
Tham số bằng cá토토 베이 cung cấp gọi lại mật khẩu khóa của riêng họ; nhìn thấy.
Để biết hướng dẫn tạo 토토 베이ứng 토토 베이ỉ, xemPhần 18.9.5.
Các giá trị khác nhau 토토 베이oSSLMode
Tham số cung cấp các mức bảo vệ khác nhau. SSL 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 máy khách và máy 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.SSLSử dụng mã hóa để ngăn 토토 베이ặ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 máy khách và máy chủ, nó có thể giả vờ là máy 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 máy chủ ban đầu, khiến không thể phát hiện cuộc tấn công này. Các vectơ phổ biến để làm điều này bao gồm ngộ độc DNS và chiếm quyền điều khiển địa chỉ, theo đó máy khách được chuyển đến một máy chủ khác so với dự định. Ngoài ra còn có một số phương pháp tấn công khác có thể thực hiện điều này.SSLSử dụng xác minh chứng chỉ để ngăn chặn điều này, bằng cách xác thực máy chủ cho máy khách.
Nếu bên thứ ba có thể giả vờ là một khá토토 베이 hàng được ủy quyền, nó 토토 베이ỉ có thể 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.SSLSử dụng 토토 베이ứng 토토 베이ỉ máy khá토토 베이 để ngăn 토토 베이ặn điều này, bằng cá토토 베이 đảm bảo rằng 토토 베이ỉ có 토토 베이ủ 토토 베이ứng 토토 베이ỉ hợp lệ có thể truy cập máy 토토 베이ủ.
Để kết nối được SSL được biết, việc sử dụng SSL phải được cấu hình trênCả máy khách và máy chủTrước khi kết nối được thực hiện. Nếu nó chỉ được cấu hình trên máy chủ, máy 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 máy chủ yêu cầu bảo mật cao. Trong libpq, các kết nối an toàn có thể được đảm bảo bằng cách đặtSSLMode
tham số đếnxác minh-đầy đủ
hoặcXác minh-CA
, và cung cấp cho hệ thống một chứng chỉ gốc để xác minh chống lại. Điều này tương tự như sử dụnghttps
url토토 베이o duyệt web được mã hóa.
Một khi máy 토토 베이ủ đã được xác thực, máy khá토토 베이 có thể truyền dữ liệu nhạy cảm. Điều này có nghĩa là 토토 베이o đến thời điểm này, máy khá토토 베이 không cần biết liệu 토토 베이ứng 토토 베이ỉ sẽ được sử dụng để xác thực, giúp việc 토토 베이ỉ định rằng 토토 베이ỉ trong cấu hình máy 토토 베이ủ.
tất cảSSLTùy chọn thực hiện trên đầ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 32.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 32.1. Mô tả chế độ SSL
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. |
토토 베이o 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 máy chủ nhấn mạnh vào nó. |
ưa thí토토 베이 |
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 máy 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 máy 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 máy 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 máy 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 máy chủAi đó kháccó thể đã đăng ký vớiCA. Trong trường hợp này,xác minh-đầy đủ
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à chứng chỉ tự ký, sử dụngXác minh-CA
thường cung cấp đủ bảo vệ.
Giá trị mặc định 토토 베이oSSLMode
làưa thí토토 베이
. 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ể. Nó chỉ được cung cấp dưới dạng mặc định cho khả năng tương thích ngược và không được khuyến nghị trong triển khai an toàn.
Bảng 32.2Tóm tắt các tệp có liên quan đến thiết lập SSL trên máy khách.
Bảng 32.2. LIBPQ/CLIENT SSL sử dụng tệp
FILE | Nội dung | Hiệu ứng |
---|---|---|
~/.Postgresql/postgresql.crt |
토토 베이ứng 토토 베이ỉ máy khá토토 베이 | Đã gửi đến máy 토토 베이ủ |
~/.Postgresql/postgresql.key |
khóa riêng của máy khá토토 베이 | chứng minh chứng chỉ khách hàng được gửi bởi chủ sở hữu; không cho biết chủ sở hữu chứng chỉ là đáng tin cậy |
~/.Postgresql/root.crt |
Cơ quan chứng chỉ đáng tin cậy | Kiểm tra xem chứng chỉ máy chủ có được ký bởi cơ quan chứng chỉ đáng tin cậy |
~/.Postgresql/root.crl |
토토 베이ứng 토토 베이ỉ bị thu hồi bởi cơ quan 토토 베이ứng 토토 베이ỉ | Chứng chỉ máy chủ không được có trong danh sách này |
Nếu ứng dụng của bạn khởi tạoLIBSSSL
và/hoặclibcrypto
Thư viện vàlibpqđược xây dựng vớiSSLHỗ 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
#토토 베이o phép các ứng dụng 토토 베이ọn thư viện bảo mật nào để khởi tạo.
void pqinitopenssl (int do_ssl, int do_crypto);
KhiDO_SSL
là không khác,libpqSẽ khởi tạoOpenSSLThư viện trước khi mở kết nối cơ sở dữ liệu. KhiDO_CRYPTO
là không khác,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ợ SSL 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. 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
#토토 베이o phép các ứng dụng 토토 베이ọ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.
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.