postgresql사용에 대한 기본 지원이 있습니다SSL사용을 사용하여 클라이언트/서버 통신을 암호화하기위한 연결tls보안 증가를위한 프로토콜. 보다섹션 19.9서버 측에 대한 자세한 내용SSL기능.
libpq시스템 전체를 읽습니다OpenSSL구성 파일. 기본적 으로이 파일은입니다.OpenSSL.CNF
OpenSSL 버전 -D
. 이 기본값은 환경 변수를 설정하여 재정의 할 수 있습니다OpenSSL_CONF
원하는 구성 파일의 이름으로.
기본적으로PostgreSQL서버 토토 커뮤니티의 확인을 수행하지 않습니다. 이는 클라이언트가 알지 않고 서버 아이덴티티 (예 : DNS 레코드를 수정하거나 서버 IP 주소를 인수하여)를 스푸핑 할 수 있음을 의미합니다. 스푸핑을 방지하기 위해 클라이언트는 신뢰 체인을 통해 서버의 신원을 확인할 수 있어야합니다. 신뢰 체인은 루트 (자체 서명) 인증 기관 (를 배치하여 확립됩니다.CA) 하나의 컴퓨터 및 잎 증명서에 대한 토토 커뮤니티서명다른 컴퓨터의 루트 토토 커뮤니티에 의해. 를 사용하는 것도 가능합니다.“중간”루트 인증서 및 서명 잎 증명서에 의해 서명 된 인증서
클라이언트가 서버의 신원을 확인할 수 있도록 클라이언트에 루트 인증서를 놓고 서버의 루트 인증서에 서명 한 리프 인증서를 배치하십시오. 서버가 클라이언트의 신원을 확인할 수 있도록 서버에 루트 인증서와 클라이언트에 루트 인증서에 서명 한 리프 인증서를 배치하십시오. 하나 이상의 중간 인증서 (일반적으로 잎 증명서와 함께 저장)를 사용하여 리프 인증서를 루트 인증서에 연결할 수도 있습니다.
Once a chain of trust has been established, there are two ways for the client to validate the leaf certificate sent by the server. 매개 변수 인 경우sslmode
로 설정되었습니다verify-ca
, LIBPQ는 클라이언트에 저장된 루트 토토 커뮤니티까지 토토 커뮤니티 체인을 확인하여 서버가 신뢰할 수 있는지 확인합니다. 만약에sslmode
verify-full
, libpq will또한서버 호스트 이름이 서버 인증서에 저장된 이름과 일치하는지 확인하십시오. 서버 인증서를 확인할 수없는 경우 SSL 연결이 실패합니다.verify-full
대부분의 보안에 민감한 환경에서 권장됩니다.
inverify-full
모드, 호스트 이름은 토토 커뮤니티의 대체 이름 속성 (s) (san) 또는 san의 san이없는 경우 공통 이름 속성과 일치합니다.dnsname
존재합니다. 토토 커뮤니티 이름 속성이 별표로 시작하는 경우 (*
), 별표는 와일드 카드로 취급되며 모든 문자와 일치합니다제외a dot (.
). 이는 토토 커뮤니티가 하위 도메인과 일치하지 않음을 의미합니다. 호스트 이름 대신 IP 주소를 사용하여 연결이 이루어지면 IP 주소가 Sans of Type에 대해 DNS 조회를 수행하지 않고 일치합니다.iPaddress
또는dnsname
. 그렇지 않은 경우iPaddress
SAN이 존재하고 일치하지 않습니다dnsname
SAN이 있으며, 호스트 IP 주소는 공통 이름 속성과 일치합니다.
이전 버전의 PostgreSQL과 후진 호환성을 위해 호스트 IP 주소는와 다른 방식으로 확인됩니다.RFC 6125. 호스트 IP 주소는 항상와 일치합니다.dnsname
SANS 및iPaddress
SANS, 관련 SAN이 존재하지 않으면 공통 이름 속성과 일치 할 수 있습니다.
서버 토토 커뮤니티 확인을 허용하려면 파일에 하나 이상의 루트 토토 커뮤니티를 배치해야합니다~/.postgresql/root.crt
사용자의 홈 디렉토리에서. (Microsoft Windows에서 파일은 이름이입니다.%appdata%\ postgresql \ root.crt
.) 서버에서 보낸 인증서 체인을 클라이언트에 저장된 루트 인증서에 연결 해야하는 경우 중간 인증서도 파일에 추가해야합니다.
토토 커뮤니티 취소 목록 (CRL) 항목도 파일이 확인되면~/.postgresql/root.crl
존재 (%appdata%\ postgresql \ root.crl
Microsoft Windows에서).
루트 토토 커뮤니티 파일 및 CRL의 위치는 연결 매개 변수를 설정하여 변경할 수 있습니다SSLROOTCERT
andSSLCRL
또는 환경 변수pgsslrootcert
andpgsslcrl
. sslcrldir
또는 환경 변수pgsslcrldir
CRL 파일을 포함하는 디렉토리를 지정하는 데 사용될 수도 있습니다.
이전 버전의 PostgreSQL과의 거꾸로 호환성을 위해 루트 CA 파일이 존재하면의 동작sslmode
=요구
verify-ca
, 즉 서버 인증서가 CA에 대해 검증되었습니다. 이 동작에 의존하는 것은 권장되지 않으며 인증서 유효성 검사가 필요한 응용 프로그램은 항상 사용해야합니다verify-ca
또는verify-full
.
서버가 클라이언트의 잎 증명서를 요청하여 클라이언트의 신원을 확인하려고하는 경우libpq파일에 저장된 토토 커뮤니티를 보내~/.postgresql/postgresql.crt
사용자의 홈 디렉토리에서. 토토 커뮤니티는 서버가 신뢰하는 루트 토토 커뮤니티로 체인해야합니다. 일치하는 개인 키 파일~/.postgresql/postgresql.key
도 참석해야합니다. Microsoft Windows 에서이 파일은입니다.%appdata%\ postgresql \ postgresql.crt
and%appdata%\ postgresql \ postgresql.key
. 토토 커뮤니티 및 키 파일의 위치는 연결 매개 변수에 의해 상환 될 수 있습니다.SSLCERT
andsslkey
또는 환경 변수에 의해pgsslcert
andpgsslkey
.
UNIX 시스템에서 개인 키 파일의 권한은 세계 또는 그룹에 대한 액세스를 허용하지 않아야합니다. 와 같은 명령으로 이것을 달성하십시오.CHMOD 0600 ~/.postgresql/postgresql.key
. 또는 파일은 루트가 소유 할 수 있으며 Group Read Access (즉,0640
권한). 이 설정은 운영 체제에서 토토 커뮤니티 및 키 파일을 관리하는 설치를위한 것입니다. 의 사용자libpq해당 인증서 및 키 파일에 액세스 할 수있는 그룹 구성원이되어야합니다. (Microsoft Windows에서는이므로 파일 권한 점검이 없습니다.%appdata%\ postgresql
디렉토리가 안전하다고 추정됩니다.)
첫 번째 토토 커뮤니티postgresql.crt
고객의 개인 키와 일치해야하므로 고객의 토토 커뮤니티 여야합니다.“중간”인증서는 파일에 선택적으로 추가 될 수 있습니다. 따라서 서버에서 중간 인증서를 저장하는 것을 피하십시오 (SSL_CA_FILE).
인증서와 키는 PEM 또는 ASN.1 Der 형식에있을 수 있습니다.
키는 ClearText에 저장되거나가 지원하는 알고리즘을 사용하여 암호로 암호화 될 수 있습니다OpenSSL, AES-128처럼. 키가 암호화 된 상태로 저장되면 암호화가에 제공 될 수 있습니다.sslpassword연결 옵션. 암호화 된 키가 제공되고sslpassword
옵션이 없거나 비어 있으면 비밀번호가 대화식으로 촉진됩니다.OpenSSLwithPEM 패스 문구 입력 :
tty를 사용할 수있는 경우 프롬프트. 응용 프로그램은 클라이언트 토토 커뮤니티 프롬프트와 처리를 무시할 수 있습니다.sslpassword
자체 키 비밀번호 콜백을 제공하여 매개 변수; 보다PQSETSSLKEYPASSHOOK_OPENSSL
.
토토 커뮤니티 작성에 대한 지침은 참조섹션 19.9.5.
다른 값sslmode
매개 변수는 다른 수준의 보호를 제공합니다. SSL은 세 가지 유형의 공격으로부터 보호를 제공 할 수 있습니다.
제 3자가 클라이언트와 서버 간의 네트워크 트래픽을 검사 할 수 있다면 연결 정보 (사용자 이름과 암호 포함)와 전달 된 데이터를 모두 읽을 수 있습니다..SSL이를 방지하기 위해 암호화를 사용합니다.
제 3자가 클라이언트와 서버를 전달하는 동안 데이터를 수정할 수 있다면 서버 인 척하여 데이터를보고 수정할 수 있습니다암호화 된 경우에도. 그런 다음 제 3자는 연결 정보와 데이터를 원래 서버로 전달 하여이 공격을 감지 할 수 없습니다. 이를 수행하는 일반적인 벡터에는 DNS 중독 및 주소 하이재킹이 포함되며, 이에 따라 클라이언트는 의도 한 것과는 다른 서버로 향합니다. 이를 달성 할 수있는 몇 가지 다른 공격 방법이 있습니다.SSL서버를 클라이언트에게 인증하여이를 방지하기 위해 토토 커뮤니티 확인을 사용합니다.
제 3자가 승인 된 클라이언트 인 척 할 수 있다면 단순히 액세스 할 수없는 데이터에 액세스 할 수 있습니다. 일반적으로 불안한 암호 관리를 통해 발생할 수 있습니다.SSL유효한 토토 커뮤니티 보유자 만 서버에 액세스 할 수 있는지 확인하여 클라이언트 토토 커뮤니티를 사용하여이를 방지합니다.
알려진 SSL에 대한 연결을 위해서는 SSL 사용법을 구성해야합니다클라이언트와 서버 모두연결하기 전에. 서버에서만 구성된 경우 클라이언트는 서버에 높은 보안이 필요하다는 것을 알기 전에 민감한 정보 (예 : 비밀번호)를 전송 할 수 있습니다. LIBPQ에서는를 설정하여 안전한 연결을 보장 할 수 있습니다.SSLMODE
매개 변수 toverify-full
또는verify-ca
, 시스템에 루트 토토 커뮤니티를 제공하여 확인할 수 있습니다. 이것은 사용과 유사합니다https
URL암호화 된 웹 브라우징의 경우
서버가 인증되면 클라이언트는 민감한 데이터를 전달할 수 있습니다. 즉,이 시점까지 클라이언트는 인증에 토토 커뮤니티가 사용되는지 알 필요가 없으므로 서버 구성에서만이를 지정할 수 있습니다..
allSSL옵션은 암호화와 키를 교환하는 형태로 오버 헤드를 전달하므로 성능과 보안 사이에 이루어져야하는 트레이드 오프가 있습니다..표 34.1다른 위험을 설명sslmode
값은 보호 및 보안 및 오버 헤드에 대한 진술을 보호합니다.
표 34.1. SSL 모드 설명
sslmode |
도청 보호 | MITM보호 | 성명서 |
---|---|---|---|
비활성화 |
아니오 | 아니오 | 나는 보안에 관심이 없으며 암호화의 오버 헤드를 지불하고 싶지 않습니다. |
허용 |
어쩌면 | 아니오 | 보안에 관심이 없지만 서버가 주장하면 암호화의 오버 헤드를 지불 할 것입니다. |
선호 |
어쩌면 | 아니오 | 나는 암호화에 관심이 없지만 서버가 지원하면 암호화 오버 헤드를 지불하고 싶습니다. |
요구 |
예 | 아니오 | 내 데이터가 암호화되기를 원하고 오버 헤드를 수락합니다. 네트워크가 항상 내가 원하는 서버에 연결할 수 있다고 믿습니다. |
verify-ca |
예 | CA 정책에 따라 | 데이터를 암호화하고 오버 헤드를 수락합니다. 내가 신뢰하는 서버에 연결했는지 확인하고 싶습니다. |
verify-full |
예 | 예 | 데이터를 암호화하고 오버 헤드를 수락합니다. 나는 내가 신뢰하는 서버에 연결하고 그것이 내가 지정한 것입니다. |
verify-ca
andverify-full
루트의 정책에 따라CA. 대중 인 경우CA사용됩니다.verify-ca
서버에 연결할 수 있습니다.다른 사람에 등록했을 수 있습니다CA. 이 경우verify-full
항상 사용해야합니다. 현지인 경우CA사용 또는 자체 서명 인증서를 사용하여verify-ca
종종 충분한 보호를 제공합니다.
기본값sslmode
is선호
. 테이블에 표시된 것처럼 보안 관점에서 의미가 없으며 가능한 경우 성능 오버 헤드 만 약속합니다. 후진 호환성의 기본값으로 만 제공되며 보안 배포에는 권장되지 않습니다.
표 34.2클라이언트의 SSL 설정과 관련된 파일을 요약합니다.
표 34.2. libpq/client ssl 파일 사용
File | 내용 | 효과 |
---|---|---|
~/.postgresql/postgresql.crt |
클라이언트 토토 커뮤니티 | 서버로 전송 |
~/.postgresql/postgresql.key |
클라이언트 개인 키 | 소유자가 보낸 고객 토토 커뮤니티를 증명합니다. 토토 커뮤니티 소유자가 신뢰할 수 있음을 나타내지 않습니다 |
~/.postgresql/root.crt |
신뢰할 수있는 토토 커뮤니티 당국 | 신뢰할 수있는 인증서에 의해 서버 인증서가 서명되었는지 확인 |
~/.postgresql/root.crl |
토토 커뮤니티 당국이 취소 한 토토 커뮤니티 | 서버 토토 커뮤니티는이 목록에 있어야합니다 |
응용 프로그램이 초기화되는 경우libssl
및/또는libcrypto
라이브러리 및libpqSSL지원, 전화해야PQINITOPENSSL
libpqthelibssl
및/또는libcrypto
라이브러리는 응용 프로그램에 의해 초기화되어libpq해당 라이브러리를 초기화하지 않습니다. 그러나 이것은 사용시 불필요합니다OpenSSL버전 1.1.0 이상, 중복 초기화가 더 이상 문제가되지 않기 때문에
PQINITOPENSSL
애플리케이션이 초기화 할 보안 라이브러리를 선택할 수 있습니다.
void pqinitopenssl (int do_ssl, int do_crypto);
언제do_ssl
는 0이 아니며libpq초기화OpenSSL처음 데이터베이스 연결을 열기 전에 라이브러리. 언제do_crypto
는 0이 아닙니다.libcrypto
라이브러리가 초기화됩니다. 기본적으로 (ifPQINITOPENSSL
호출되지 않음), 두 라이브러리 모두 초기화됩니다. SSL 지원이 컴파일되지 않으면이 기능은 존재하지만 아무것도하지 않습니다.
응용 프로그램을 사용하고 초기화하는 경우OpenSSL또는 그 기본libcrypto
도서관, 당신필수데이터베이스 연결을 처음 열기 전에 적절한 매개 변수에 대해 Zeroes 로이 기능을 호출하십시오. 또한 데이터베이스 연결을 열기 전에 초기화를 수행했는지 확인하십시오.
pqinitssl
응용 프로그램이 초기화 할 보안 라이브러리를 선택할 수 있습니다.
void pqinitssl (int do_ssl);
이 기능은와 같습니다.pqinitopenssl (do_ssl, do_ssl)
. 두 가지를 초기화하거나 두 가지를 초기화하는 응용 프로그램에는 충분합니다OpenSSLandlibcrypto
.
pqinitssl
이후에 존재했습니다PostgreSQL8.0, 동안PQINITOPENSSL
PostgreSQL8.4,pqinitssl
이전 버전의에서 작업 해야하는 응용 프로그램에 바람직 할 수 있습니다.libpq.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면