이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
You may want to view the same page for the배트맨 토토 PostgreSQL : 문서 : 17 : 18.9. SSL로 TCP/IP 연결 보안버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

18.9. SSL로 TCP/IP 사설 토토 보안

PostgreSQL사용에 대한 기본 지원이 있습니다SSL보안 강화를 위해 클라이언트/서버 통신 암호화에 대한 사설 토토. 이것은 필요합니다OpenSSL클라이언트 및 서버 시스템 모두에 설치되고 해당 지원PostgreSQLis enabled at build time (see16 장).

withSSL지원 컴파일,postgresql서버를 시작할 수 있습니다SSL매개 변수를 설정하여 활성화SSLtooninpostgresql.conf. 서버는 정상과를 모두 듣습니다.SSL동일한 TCP 포트의 사설 토토 및 사용 여부에 대해 사설 토토 클라이언트와 협상 할 것입니다SSL. 기본적으로 이것은 클라이언트의 옵션입니다. 보다섹션 20.1사용이 필요한 서버를 설정하는 방법SSL일부 또는 모든 사설 토토의 경우

PostgreSQL시스템 전체를 읽습니다OpenSSL구성 파일. 기본적 으로이 파일은입니다.OpenSSL.CNFOpenSSL 버전 -D. 이 기본값은 환경 변수를 설정하여 재정의 할 수 있습니다OpenSSL_CONF원하는 구성 파일의 이름으로.

OpenSSL다양한 강도의 광범위한 암호 및 인증 알고리즘을 지원합니다. 암호 목록은에 지정할 수 있습니다.OpenSSL구성 파일, 수정하여 데이터베이스 서버에서 사용하기 위해 특별히 암호를 지정할 수 있습니다SSL_CIPHERSinpostgresql.conf.

참고 :사용하여 암호화 오버 헤드없이 인증을 가질 수 있습니다Null-Sha또는NULL-MD5암호. 그러나 중간에 사람은 클라이언트와 서버 간의 통신을 읽고 통과 할 수 있습니다. 또한 인증 오버 헤드에 비해 암호화 오버 헤드가 최소화됩니다. 이러한 이유로 Null 암호는 권장되지 않습니다.

시작하려면SSL모드, 서버 인증서와 개인 키가 포함 된 파일이 있어야합니다. 기본적 으로이 파일은 명명 될 것으로 예상server.crtandserver.key각각 서버의 데이터 디렉토리에서 구성하지만 구성 매개 변수를 사용하여 다른 이름과 위치를 지정할 수 있습니다SSL_CERT_FILEandssl_key_file.

On Unix systems, the permissions onserver.key세계 또는 그룹에 대한 접근을 허용하지 않아야합니다. 명령으로 이것을 달성사설 토토MOD 0600 Server.key. 또는 파일은 루트가 소유 할 수 있으며 Group Read Access (즉,0640permissions). That setup is intended for installations where certificate and key files are managed by the operating system. The user under which thePostgreSQL서버 실행은 해당 인증서 및 키 파일에 액세스 할 수있는 그룹 구성원이되어야합니다.

개인 키가 암호로 보호되는 경우 서버는 암호를 자랑하고 입력 될 때까지 시작되지 않습니다..

첫 번째 인증서Server.crt서버의 개인 키와 일치해야하므로 서버의 인증서 여야합니다. 의 증명서"intermediate"인증 기관도 파일에 추가 될 수 있습니다. 이렇게하면 루트 및 중간 인증서가로 작성되었다고 가정 할 때 중간 인증서를 클라이언트에 저장할 필요가 없습니다.V3_CA확장. (이것은 인증서의 기본 제약 조건을 설정합니다CAtotrue.) 이것은 중간 증명서를보다 쉽게 ​​만료 할 수 있습니다.

루트 인증서를 추가 할 필요는 없습니다Server.crt. 대신 클라이언트는 서버 인증 체인의 루트 인증서를 가져야합니다.

18.9.1. 클라이언트 인증서 사용

고객이 신뢰할 수있는 인증서를 제공하도록 요구하려면 루트 인증서 당국의 인증서를 배치하십시오 (CAs) 데이터 디렉토리의 파일을 신뢰하고 매개 변수를 설정SSL_CA_FILEinpostgresql.conf새 파일 이름으로 인증 옵션을 추가하십시오ClientCert = 1적절한hostssl라인 inpg_hba.conf. 그런 다음 SSL 연결 시작 중에 클라이언트에게 인증서를 요청합니다. (보다사설 토토 PostgreSQL : 문서 : 9.6 : SSL 지원클라이언트에서 인증서를 설정하는 방법에 대한 설명은 서버가 클라이언트의 인증서가 신뢰할 수있는 인증서 중 하나에 의해 서명되었는지 확인합니다.

기존 루트 인증서까지 체인되는 중간 인증서 파일에도 나타날 수 있습니다root.crt클라이언트에 저장을 피하려면 (루트 및 중간 인증서가 생성되었다고 가정하면V3_CA확장). 인증서 취소 목록 (CRL) 항목도 매개 변수을 확인합니다.SSL_CRL_FILE설정되었습니다.

theClientCert인증 옵션은 모든 인증 방법에 사용할 수 있지만pg_hba.conf로 지정된 줄hostssl. 언제ClientCert는 지정되지 않았거나 0으로 설정되어 있지 않으면 서버는 CA 파일에 대해 제시된 클라이언트 인증서를 확인한 경우에도 여전히 클라이언트 인증서를 제시 할 것을 주장하지 않습니다..

클라이언트 인증서를 설정하는 경우를 사용할 수 있습니다.cert인증 방법, 인증서가 사용자 인증을 제어하고 사설 토토 보안을 제공하도록합니다. 보다섹션 20.3.9자세한 내용. (지정할 필요가 없습니다ClientCert = 1명시 적으로certauthentication method.)

18.9.2. SSL 서버 파일 사용

Table 18-2summarizes the files that are relevant to the SSL setup on the server. (The shown file names are default or typical names. The locally configured names could be different.)

표 18-2. SSL 서버 파일 사용

파일 내용 효과
SSL_CERT_FILE($ pgdata/server.crt) 서버 인증서 서버의 ID를 표시하기 위해 클라이언트에게 보냈습니다
ssl_key_file($ pgdata/server.key) 서버 개인 키 proves server certificate was sent by the owner; does not indicate certificate owner is trustworthy
ssl_ca_file($ pgdata/root.crt) 신뢰할 수있는 인증서 신뢰할 수있는 인증서에 의해 고객 인증서가 서명되었는지 확인
SSL_CRL_FILE($ pgdata/root.crl) 인증서 당국이 취소 한 인증서 클라이언트 인증서는이 목록에 있어야합니다

파일Server.key, Server.crt, root.crtroot.crl(또는 구성된 대체 이름)는 서버 시작 중에 만 검사됩니다. 따라서 변경 사항이 변경되도록 서버를 다시 시작해야합니다.

18.9.3. 인증서 만들기

365 일 동안 유효한 서버에 대한 간단한 자체 서명 인증서를 만들려면 다음을 사용하십시오OpenSSL명령, 교체dbhost.yourdomain.com서버 호스트 이름 :

OpenSSL REQ -New -X509 -Days 365 -Nodes -Text -out Server.crt \
  -keyout server.key -subj "/cn =dbhost.yourdomain.com"

그런 다음 :

CHMOD OG-RWX Server.key

권한이 이것보다 더 자유 롭다면 서버가 파일을 거부하기 때문에. 서버 개인 키 및 인증서를 만드는 방법에 대한 자세한 내용은를 참조하십시오.OpenSSL문서.

자체 서명 인증서는 테스트에 사용될 수 있지만 인증 기관이 서명 한 인증서 (CA) (일반적으로 엔터프라이즈 전역의 루트CA) 생산에 사용해야합니다.

클라이언트가 신원을 검증 할 수있는 서버 인증서를 작성하려면 먼저 인증서 서명 요청을 만듭니다 (CSR) 및 공개/개인 키 파일 :

OpenSSL Req -New -Nodes -text -out root.csr \
  -keyout root.key -subj "/cn =root.yourdomain.com"
chmod og-rwx root.key

그런 다음 루트 인증 기관을 만들기 위해 키와 함께 요청에 서명하십시오 (기본값 사용OpenSSL구성 파일 위치Linux) :

OpenSSL x509 -req -in root.csr -text -days 3650 \
  -extfile /etc/ssl/openssl.cnf -extensions v3_ca \
  -signkey root.key -out root.crt

마지막으로 새 루트 인증서에 의해 서명 된 서버 인증서 작성 :

OpenSSL REQ -New -Nodes -text -out Server.csr \
  -keyout server.key -subj "/cn =dbhost.yourdomain.com"
chmod og-rwx server.key

OpenSSL x509 -req -in server.csr -text -days 365 \
  -ca root.crt -cakey root.key -cacreateserial \
  -out server.crt

server.crtandServer.keyshould be stored on the server, androot.crt클라이언트에 저장되어 클라이언트가 서버의 리프 인증서가 신뢰할 수있는 루트 인증서로 서명했는지 확인할 수 있습니다.root.keyshould be stored offline for use in creating future certificates.

중간 인증서를 포함하는 신뢰 체인을 만들 수도 있습니다.

# 루트
OpenSSL req -new -nodes -text -out root.csr \
  -keyout root.key -subj "/cn =root.yourdomain.com"
chmod og-rwx root.key
openssl x509 -req -in root.csr -text -days 3650 \
  -extfile /etc/ssl/openssl.cnf -extensions v3_ca \
  -signkey root.key -out root.crt

# intermediate
openssl req -new -nodes -text -out intermediate.csr \
  -keyout intermediate.key -subj "/CN=intermediate.yourdomain.com"
CHMOD OG-RWX Intermediate.key
OpenSSL x509 -req -in intermediate.csr -text -days 1825 \
  -extfile /etc/ssl/openssl.cnf -extensions v3_ca \
  -ca root.crt -cakey root.key -cacreateserial \
  -out intermediate.crt

# 잎
OpenSSL Req -New -Nodes -text -out server.csr \
  -keyout server.key -subj "/cn =dbhost.yourdomain.com"
chmod og-rwx server.key
OpenSSL x509 -req -in server.csr -text -days 365 \
  -ca intermediate.crt -cakey intermediate.key -cacreateserial \
  -out server.crt

Server.crtandIntermediate.crt인증서 파일 번들에 연결되어 서버에 저장해야합니다.Server.key서버에 저장해야합니다.root.crt클라이언트에 저장되어 클라이언트가 서버의 리프 인증서가 신뢰할 수있는 루트 인증서에 사설 토토된 일련의 인증서로 서명되었는지 확인할 수 있습니다.root.keyIntermediate.keyshould be stored offline for use in creating future certificates.