19.9. SSL을 통한 보안 TCP/IP 연결#

포스트그레SQL사용에 대한 기본 지원이 있습니다SSL11773_11871오픈SSL클라이언트 및 서버 시스템 모두에 설치되며 다음을 지원합니다.PostgreSQL빌드 시 활성화됩니다(참조17장).

약관SSL그리고TLS는 종종 a를 사용하여 안전하게 암호화된 연결을 의미하기 위해 같은 의미로 사용됩니다.TLS프로토콜.SSL프로토콜은 다음의 전신입니다TLS프로토콜 및 용어SSL비록 암호화된 연결에는 여전히 사용됩니다.SSL프로토콜은 더 이상 지원되지 않습니다.SSL은와 같은 의미로 사용됩니다.TLSinPostgreSQL.

19.9.1. 기본 설정#

함께SSL지원이 컴파일되었습니다.포스트그레SQL다음을 사용하여 암호화된 연결을 지원하여 서버를 시작할 수 있습니다.TLS매개변수 설정으로 프로토콜 활성화ssl켜짐postgresql.conf. 서버는 일반 및SSL동일한 TCP 포트에 연결하고 연결 클라이언트와 사용 여부를 협상합니다SSL. 기본적으로 이는 클라이언트의 선택입니다. 참조섹션 21.1다음을 사용해야 하는 서버를 설정하는 방법에 대해SSL일부 또는 모든 연결에 대해.

시작하려면SSL모드에서는 서버 토토 결과와 개인 키가 포함된 파일이 존재해야 합니다. 기본적으로 이러한 파일의 이름은 다음과 같습니다.서버.crt그리고서버.키, 각각 서버의 데이터 디렉터리에 있지만 구성 매개변수를 사용하여 다른 이름과 위치를 지정할 수 있습니다.ssl_cert_file그리고ssl_key_file.

Unix 시스템에서 다음에 대한 권한은서버.키세계나 그룹에 대한 모든 접근을 허용하지 않아야 합니다. 다음 명령으로 이를 달성합니다.chmod 0600 서버.키. 또는 루트가 파일을 소유하고 그룹 읽기 액세스 권한을 가질 수 있습니다(즉,0640권한). 해당 설정은 운영 체제에서 토토 결과 및 키 파일을 관리하는 설치를 위한 것입니다. 해당 사용자는PostgreSQL서버 실행은 해당 토토 결과 및 키 파일에 액세스할 수 있는 그룹의 구성원이 되어야 합니다.

데이터 디렉토리가 그룹 읽기 액세스를 허용하는 경우 위에 설명된 보안 요구 사항을 준수하기 위해 토토 결과 파일은 데이터 디렉토리 외부에 위치해야 할 수도 있습니다. 일반적으로 권한이 없는 사용자가 데이터베이스를 백업할 수 있도록 그룹 액세스가 활성화됩니다. 이 경우 백업 소프트웨어는 토토 결과 파일을 읽을 수 없으며 오류가 발생할 수 있습니다.

개인 키가 암호로 보호되는 경우 서버는 암호를 입력하라는 메시지를 표시하고 암호를 입력할 때까지 시작되지 않습니다. 기본적으로 암호를 사용하면 서버를 다시 시작하지 않고 서버의 SSL 구성을 변경하는 기능이 비활성화됩니다. 단, 다음을 참조하세요.ssl_passphrase_command_supports_reload. 또한 암호로 보호된 개인 키는 Windows에서 전혀 사용할 수 없습니다.

첫 번째 토토 결과서버.crt서버의 개인 키와 일치해야 하므로 서버의 토토 결과여야 합니다. 의 토토 결과중급인증 기관을 파일에 추가할 수도 있습니다. 이렇게 하면 루트 및 중간 토토 결과가 다음을 사용하여 생성되었다고 가정하여 클라이언트에 중간 토토 결과를 저장할 필요가 없습니다.v3_ca확장. (이것은 토토 결과의 기본 제약 조건을 설정합니다.캘리포니아.) 이렇게 하면 중간 토토 결과가 더 쉽게 만료될 수 있습니다.

루트 토토 결과를 추가할 필요는 없습니다.서버.crt. 대신 클라이언트에는 서버 토토 결과 체인의 루트 토토 결과가 있어야 합니다.

19.9.2. OpenSSL 구성#

포스트그레SQL시스템 전체를 읽습니다.오픈SSL구성 파일. 기본적으로 이 파일의 이름은openssl.cnf그리고 다음이 보고한 디렉토리에 위치합니다.openssl 버전 -d. 이 기본값은 환경 변수를 설정하여 재정의할 수 있습니다.OPENSSL_CONF원하는 구성 파일의 이름으로.

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

참고

이용하여 암호화 오버헤드 없이 인증이 가능합니다.NULL-SHA또는NULL-MD5암호. 그러나 중간자(man-in-the-middle)는 클라이언트와 서버 간의 통신을 읽고 전달할 수 있습니다. 또한 인증에 비해 암호화 오버헤드가 최소화됩니다. 이러한 이유로 NULL 암호화는 권장되지 않습니다.

19.9.3. 클라이언트 토토 결과 사용#

클라이언트가 신뢰할 수 있는 토토 결과를 제공하도록 요구하려면 루트 인증 기관의 토토 결과를 배치하십시오(캘리포니아s) 데이터 디렉터리의 파일을 신뢰하고 매개변수를 설정합니다.ssl_ca_fileinpostgresql.conf새 파일 이름에 인증 옵션을 추가clientcert=verify-ca또는clientcert=verify-full해당하는 사람에게hostsslpg_hba.conf. 그런 다음 SSL 연결 시작 중에 클라이언트에서 토토 결과가 요청됩니다. (참조스포츠 토토 PostgreSQL : 문서 : 16 : 34.19. SSL 지원클라이언트에서 토토 결과를 설정하는 방법에 대한 설명입니다.)

에 대한hostssl다음으로 입장clientcert=verify-ca, 서버는 클라이언트의 토토 결과가 신뢰할 수 있는 인증 기관 중 하나에 의해 서명되었는지 확인합니다. 만일clientcert=verify-full이 지정되면 서버는 토토 결과 체인을 확인할 뿐만 아니라 사용자 이름이나 매핑이 일치하는지 여부도 확인합니다.cn20237_20349토토 결과인증 방법이 사용됩니다(참조PostgreSQL : 문서 : 16 : 21.12. 무지개 토토 인증).

기존 루트 토토 결과에 연결되는 중간 토토 결과도 다음에 나타날 수 있습니다.ssl_ca_file클라이언트에 저장하지 않으려면 파일을 사용하세요(루트 및 중간 토토 결과가 다음으로 생성되었다고 가정).v3_ca확장). 매개변수가 다음과 같은 경우 토토 결과 해지 목록(CRL) 항목도 확인됩니다.ssl_crl_file또는ssl_crl_dir설정되었습니다.

클라이언트토토 결과인증 옵션은 모든 인증 방법에 사용할 수 있지만pg_hba.conf다음으로 지정된 줄hostssl. 언제클라이언트토토 결과이 지정되지 않으면 서버는 클라이언트 토토 결과가 제공되고 CA가 구성된 경우에만 해당 CA 파일에 대해 클라이언트 토토 결과를 확인합니다.

사용자가 로그인 중에 토토 결과를 제공하도록 강제하는 두 가지 접근 방식이 있습니다.

첫 번째 접근 방식은 다음을 사용합니다.토토 결과인증 방법hostssl항목pg_hba.conf, 토토 결과 자체가 인증에 사용되는 동시에 SSL 연결 보안도 제공합니다. 참조PostgreSQL : 문서 : 16 : 21.12. 무지개 토토 인증22078_22130클라이언트토토 결과옵션을 명시적으로 사용할 때토토 결과인증 방법.) 이 경우cn토토 결과에 제공된 (일반 이름)은 사용자 이름 또는 해당 매핑과 비교하여 확인됩니다.

두 번째 접근 방식은 모든 인증 방법을 결합합니다.hostssl다음을 설정하여 클라이언트 토토 결과를 확인하는 항목클라이언트토토 결과인증 옵션verify-ca또는확인-전체. 전자 옵션은 토토 결과가 유효한지 확인만 적용하는 반면, 후자는 또한 다음을 보장합니다.cn토토 결과의 (일반 이름)이 사용자 이름 또는 해당 매핑과 일치합니다.

19.9.4. SSL 서버 파일 사용#

표 19.2서버의 SSL 설정과 관련된 파일을 요약합니다. (표시된 파일 이름은 기본 이름입니다. 로컬로 구성된 이름은 다를 수 있습니다.)

표 19.2. SSL 서버 파일 사용

파일 목차 효과
ssl_cert_file ($PGDATA/서버.crt) 서버 토토 결과 서버의 신원을 나타내기 위해 클라이언트로 전송됨
ssl_key_file ($PGDATA/server.key) 서버 개인 키 서버 토토 결과가 소유자에 의해 전송되었음을 증명합니다. 토토 결과 소유자를 신뢰할 수 있음을 나타내지 않습니다.
ssl_ca_file 신뢰할 수 있는 인증 기관 클라이언트 토토 결과가 신뢰할 수 있는 인증 기관에 의해 서명되었는지 확인
ssl_crl_file 인증 기관에 의해 취소된 토토 결과 클라이언트 토토 결과가 이 목록에 있어서는 안 됩니다

서버는 서버 시작 시와 서버 구성이 다시 로드될 때마다 이 파일을 읽습니다. 켜짐윈도우시스템에서는 새 클라이언트 연결을 위해 새 백엔드 프로세스가 생성될 때마다 다시 읽혀집니다.

서버 시작 시 이러한 파일에서 오류가 발견되면 서버는 시작을 거부합니다. 그러나 구성을 다시 로드하는 동안 오류가 감지되면 파일이 무시되고 이전 SSL 구성이 계속 사용됩니다. 켜짐윈도우시스템에서 백엔드 시작 시 이러한 파일의 오류가 감지되면 해당 백엔드는 SSL 연결을 설정할 수 없습니다. 이러한 모든 경우에 오류 조건은 서버 로그에 보고됩니다.

19.9.5. 토토 결과 생성#

365일 동안 유효한 서버용 간단한 자체 서명 토토 결과를 생성하려면 다음을 사용하십시오.오픈SSL명령, 교체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

왜냐하면 서버는 파일의 권한이 이보다 더 자유로운 경우 파일을 거부하기 때문입니다. 서버 개인 키 및 토토 결과를 생성하는 방법에 대한 자세한 내용은 다음을 참조하세요.오픈SSL문서.

자체 서명된 토토 결과를 테스트에 사용할 수 있지만 인증 기관에서 서명한 토토 결과(캘리포니아) (일반적으로 기업 전체 루트캘리포니아)를 프로덕션에 사용해야 합니다.

클라이언트가 신원을 확인할 수 있는 서버 토토 결과를 생성하려면 먼저 토토 결과 서명 요청을 생성하십시오(CSR) 및 공개/개인 키 파일:

openssl req -new -nodes -text -out root.csr \
  -keyout root.key -subj "/CN=root.yourdomain.com"
chmod og-rwx root.key

그런 다음 루트 인증 기관을 생성하기 위한 키로 요청에 서명하십시오(기본값 사용오픈SSL설정 파일 위치리눅스):

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 \
  -아웃 서버.crt

서버.crt그리고서버.키서버에 저장되어야 하며루트.crt클라이언트가 서버의 리프 토토 결과가 신뢰할 수 있는 루트 토토 결과로 서명되었는지 확인할 수 있도록 클라이언트에 저장되어야 합니다.루트.키향후 토토 결과 생성에 사용하려면 오프라인으로 저장해야 합니다.

중간 토토 결과를 포함하는 신뢰 체인을 생성하는 것도 가능합니다:

# 루트
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

# 중급
openssl req -new -nodes -text -out 중간.csr \
  -keyout 중간.키 -subj "/CN=intermediate.yourdomain.com"
chmod og-rwx 중간.키
openssl x509 -req -in 중간.csr -text -days 1825 \
  -extfile /etc/ssl/openssl.cnf -extensions v3_ca \
  -CA root.crt -CAkey root.key -CAcreateserial \
  -out 중간.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 중간.crt -CAkey 중간.키 -CAcreateserial \
  -아웃 서버.crt

서버.crt그리고중간.crt토토 결과 파일 번들로 연결되어 서버에 저장되어야 합니다.서버.키서버에도 저장되어야 합니다.루트.crt클라이언트가 서버의 리프 토토 결과가 신뢰할 수 있는 루트 토토 결과에 연결된 토토 결과 체인에 의해 서명되었는지 확인할 수 있도록 클라이언트에 저장되어야 합니다.루트.키그리고intermediate.key향후 토토 결과 생성에 사용하려면 오프라인으로 저장해야 합니다.

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.