토토 사이트사용에 대한 기본 지원이 있습니다SSL보안 강화를 위해 클라이언트/서버 통신을 암호화하는 연결입니다. 참조섹션 19.9서버측에 대한 자세한 내용SSL기능.
libpq시스템 전체를 읽습니다.오픈SSL구성 파일. 기본적으로 이 파일의 이름은openssl.cnf그리고 다음이 보고한 디렉토리에 위치합니다.openssl 버전 -d. 이 기본값은 환경 변수를 설정하여 재정의할 수 있습니다.OPENSSL_CONF원하는 구성 파일의 이름으로.
기본적으로,포스트그레SQL서버 인증서 확인을 수행하지 않습니다. 이는 클라이언트가 알지 못하는 사이에 서버 ID를 스푸핑(예: DNS 레코드를 수정하거나 서버 IP 주소를 탈취하는 등)할 수 있음을 의미합니다. 스푸핑을 방지하려면 클라이언트가 신뢰 체인을 통해 서버의 신원을 확인할 수 있어야 합니다. 루트(자체 서명) 인증 기관을 배치하여 신뢰 체인이 설정됩니다(캘리포니아) 한 컴퓨터의 인증서 및 리프 인증서서명됨다른 컴퓨터의 루트 인증서로. 다음을 사용하는 것도 가능합니다.“중급”루트 인증서로 서명되고 리프 인증서에 서명하는 인증서입니다.
클라이언트가 서버의 신원을 확인하도록 허용하려면 클라이언트에 루트 인증서를 배치하고 서버에 루트 인증서로 서명된 리프 인증서를 배치하십시오. 서버가 클라이언트의 신원을 확인할 수 있도록 하려면 서버에 루트 인증서를 배치하고 클라이언트에 루트 인증서로 서명된 리프 인증서를 배치하십시오. 하나 이상의 중간 인증서(일반적으로 리프 인증서와 함께 저장됨)를 사용하여 리프 인증서를 루트 인증서에 연결할 수도 있습니다.
신뢰 체인이 구축되면 클라이언트가 서버에서 보낸 리프 인증서의 유효성을 검사하는 두 가지 방법이 있습니다. 매개변수인 경우sslmode다음으로 설정됨verify-ca, libpq는 클라이언트에 저장된 루트 인증서까지 인증서 체인을 확인하여 서버를 신뢰할 수 있는지 확인합니다. 만일sslmode다음으로 설정됨확인-전체, libpq는또한서버 호스트 이름이 서버 인증서에 저장된 이름과 일치하는지 확인하세요. 서버 인증서를 확인할 수 없으면 SSL 연결이 실패합니다.확인-전체보안에 민감한 대부분의 환경에서는 권장됩니다.
에확인-전체모드에서 호스트 이름은 인증서의 주체 대체 이름 속성과 일치하거나, 주체 대체 이름 유형이 없는 경우 일반 이름 속성과 일치합니다.dNS이름존재합니다. 인증서의 이름 속성이 별표()로 시작하는 경우*), 별표는 모든 문자와 일치하는 와일드카드로 처리됩니다.제외점(.). 이는 인증서가 하위 도메인과 일치하지 않음을 의미합니다. 호스트 이름 대신 IP 주소를 사용하여 연결하는 경우 IP 주소가 일치합니다(DNS 조회를 수행하지 않음).
서버 인증서 확인을 허용하려면 하나 이상의 루트 인증서가 파일에 있어야 합니다.~/.토토 사이트/root.crt사용자의 홈 디렉토리. (Microsoft Windows에서는 파일 이름이 지정됩니다.%APPDATA%\토토 사이트\root.crt.) 서버에서 보낸 인증서 체인을 클라이언트에 저장된 루트 인증서에 연결하는 데 필요한 경우 중간 인증서도 파일에 추가해야 합니다.
인증서 해지 목록(CRL) 항목은 파일이 다음과 같은 경우에도 확인됩니다.~/.토토 사이트/root.crl존재합니다 (%APPDATA%\토토 사이트\root.crlMicrosoft Windows의 경우).
루트 인증서 파일과 CRL의 위치는 연결 매개변수를 설정하여 변경할 수 있습니다.sslrootcert그리고sslcrl또는 환경 변수PGSSLROOTCERT그리고PGSSLCRL. sslcrldir또는 환경 변수PGSSLCRLDIR또한 CRL 파일이 포함된 디렉터리를 지정하는 데 사용할 수 있습니다.
이전 버전의 토토 사이트과의 하위 호환성을 위해 루트 CA 파일이 존재하는 경우 다음 동작은sslmode=요구다음과 동일합니다verify-ca: 서버 인증서가 CA에 대해 검증되었음을 의미합니다. 이 동작에 의존하는 것은 권장되지 않으며 인증서 유효성 검사가 필요한 애플리케이션은 항상 다음을 사용해야 합니다.verify-ca또는확인-전체.
서버가 클라이언트의 리프 인증서를 요청하여 클라이언트의 신원을 확인하려고 시도하는 경우,libpq파일에 저장된 인증서를 보냅니다~/.토토 사이트/토토 사이트.crt사용자의 홈 디렉토리. 인증서는 서버에서 신뢰하는 루트 인증서에 연결되어야 합니다. 일치하는 개인 키 파일~/.토토 사이트/토토 사이트.key또한 있어야 합니다. Microsoft Windows에서는 이러한 파일의 이름이 지정됩니다.%APPDATA%\토토 사이트\토토 사이트.crt그리고%APPDATA%\토토 사이트\토토 사이트.key. 인증서 및 키 파일의 위치는 연결 매개변수로 재정의될 수 있습니다.sslcert그리고sslkey또는 환경 변수에 의해PGSSLCERT그리고PGSSLKEY.
Unix 시스템에서는 개인 키 파일에 대한 권한이 월드나 그룹에 대한 접근을 허용하지 않아야 합니다. 다음과 같은 명령으로 이를 달성합니다.chmod 0600 ~/.토토 사이트/토토 사이트.key. 또는 루트가 파일을 소유하고 그룹 읽기 액세스 권한을 가질 수 있습니다(즉,0640권한). 해당 설정은 운영 체제에서 인증서 및 키 파일을 관리하는 설치를 위한 것입니다. 사용자는libpq그러면 해당 인증서 및 키 파일에 액세스할 수 있는 그룹의 구성원이 되어야 합니다. (Microsoft Windows에서는 파일 권한 확인이 없습니다.%APPDATA%\토토 사이트디렉터리는 안전한 것으로 간주됩니다.)
첫 번째 인증서토토 사이트.crt클라이언트의 개인 키와 일치해야 하므로 클라이언트의 인증서여야 합니다.“중급”인증서는 선택적으로 파일에 추가될 수 있습니다. 이렇게 하면 서버에 중간 인증서를 저장할 필요가 없습니다(ssl_ca_file).
인증서와 키는 PEM 또는 ASN.1 DER 형식일 수 있습니다.
키는 일반 텍스트로 저장되거나 다음에서 지원하는 알고리즘을 사용하여 암호로 암호화될 수 있습니다.오픈SSL, AES-128과 같습니다. 키가 암호화되어 저장된 경우 암호는ssl비밀번호연결 옵션. 암호화된 키가 제공되고ssl비밀번호옵션이 없거나 비어 있으면 다음에 의해 대화식으로 비밀번호를 묻는 메시지가 표시됩니다.오픈SSL와 함께PEM 비밀번호 문구 입력:TTY를 사용할 수 있는지 묻는 메시지를 표시합니다. 애플리케이션은 클라이언트 인증서 프롬프트와ssl비밀번호매개변수를 자체 키 비밀번호 콜백으로 제공합니다. 참조PQsetSSLKeyPassHook_OpenSSL.
인증서 생성에 대한 지침은 참조섹션 19.9.5.
다음의 다른 값sslmode매개변수는 다양한 보호 수준을 제공합니다. SSL은 세 가지 유형의 공격으로부터 보호할 수 있습니다.
제3자가 클라이언트와 서버 간의 네트워크 트래픽을 검사할 수 있는 경우 연결 정보(사용자 이름 및 비밀번호 포함)와 전달된 데이터를 모두 읽을 수 있습니다.SSL이를 방지하기 위해 암호화를 사용합니다.
제3자가 클라이언트와 서버 사이를 이동하는 동안 데이터를 수정할 수 있는 경우 서버인 것처럼 가장하여 데이터를 보고 수정할 수 있습니다.암호화되어 있더라도. 그러면 제3자가 연결 정보와 데이터를 원래 서버로 전달할 수 있으므로 이 공격을 탐지하는 것이 불가능해집니다. 이를 수행하는 일반적인 벡터에는 클라이언트가 의도한 것과 다른 서버로 연결되는 DNS 중독 및 주소 하이재킹이 포함됩니다. 이를 달성할 수 있는 몇 가지 다른 공격 방법도 있습니다.SSL인증서 확인을 사용하여 클라이언트에 서버를 인증함으로써 이를 방지합니다.
제3자가 승인된 클라이언트인 것처럼 가장할 수 있다면, 접근해서는 안 되는 데이터에 단순히 접근할 수 있습니다. 일반적으로 이는 안전하지 않은 비밀번호 관리로 인해 발생할 수 있습니다.SSL유효한 인증서 보유자만 서버에 액세스할 수 있도록 하여 이를 방지하기 위해 클라이언트 인증서를 사용합니다.
연결이 SSL 보안으로 알려지려면 SSL 사용이 다음에서 구성되어야 합니다.클라이언트와 서버 모두연결이 이루어지기 전에. 서버에만 구성된 경우 클라이언트는 서버에 높은 보안이 필요하다는 사실을 알기 전에 민감한 정보(예: 비밀번호)를 보낼 수 있습니다. libpq에서는 다음을 설정하여 보안 연결을 보장할 수 있습니다.sslmode매개변수 ~확인-전체또는verify-ca, 시스템에 확인할 루트 인증서를 제공합니다. 이는를 사용하는 것과 유사합니다.https URL암호화된 웹 탐색용.
서버가 인증되면 클라이언트는 민감한 데이터를 전달할 수 있습니다. 즉, 이 시점까지는 클라이언트가 인증에 인증서가 사용될지 여부를 알 필요가 없으므로 서버 구성에서만 이를 지정하는 것이 안전합니다.
모두SSL옵션은 암호화 및 키 교환 형태로 오버헤드를 수행하므로 성능과 보안 간에 절충이 필요합니다.표 34.1다양한 위험을 설명합니다sslmode값은 보호를 제공하며 보안 및 오버헤드에 대해 어떤 설명을 제공하는지.
표 34.1. SSL 모드 설명
sslmode |
도청 방지 | MITM보호 | 성명 |
|---|---|---|---|
비활성화 |
아니요 | 아니요 | 나는 보안에 관심이 없으며 암호화 비용을 지불하고 싶지 않습니다. |
허용 |
어쩌면 | 아니요 | 나는 보안에 관심이 없지만 서버가 요구할 경우 암호화 오버헤드를 지불할 것입니다. |
선호 |
어쩌면 | 아니요 | 나는 암호화에 관심이 없지만 서버가 지원한다면 암호화 오버헤드를 지불하고 싶습니다. |
요구 |
예 | 아니요 | 나는 내 데이터를 암호화하길 원하며 오버헤드를 받아들입니다. 나는 네트워크가 내가 원하는 서버에 항상 연결되도록 해줄 것이라고 믿습니다. |
verify-ca |
예 | CA 정책에 따라 다름 | 나는 내 데이터를 암호화하길 원하며 오버헤드를 받아들입니다. 나는 내가 신뢰하는 서버에 연결되었는지 확인하고 싶습니다. |
확인-전체 |
예 | 예 | 나는 내 데이터를 암호화하길 원하며 오버헤드를 받아들입니다. 나는 내가 신뢰하는 서버에 연결하고 그것이 내가 지정한 서버인지 확인하고 싶습니다. |
차이점verify-ca그리고확인-전체루트 정책에 따라 다름캘리포니아. 일반인인 경우캘리포니아사용됩니다.verify-ca서버에 대한 연결을 허용합니다.다른 사람다음에 등록되었을 수 있습니다.캘리포니아. 이 경우,전체 확인항상 사용해야 합니다. 현지인 경우캘리포니아또는 자체 서명된 인증서를 사용하여verify-ca종종 충분한 보호를 제공합니다.
기본값sslmodeis선호. 표에서 볼 수 있듯이 이는 보안 관점에서 볼 때 의미가 없으며 가능한 경우 성능 오버헤드만 약속합니다. 이전 버전과의 호환성을 위한 기본값으로만 제공되며 보안 배포에서는 권장되지 않습니다.
표 34.2클라이언트의 SSL 설정과 관련된 파일을 요약합니다.
표 34.2. Libpq/클라이언트 SSL 파일 사용
| 파일 | 목차 | 효과 |
|---|---|---|
~/.토토 사이트/토토 사이트.crt |
클라이언트 인증서 | 서버로 전송됨 |
~/.토토 사이트/토토 사이트.key |
클라이언트 개인 키 | 소유자가 보낸 클라이언트 인증서를 증명합니다. 인증서 소유자를 신뢰할 수 있음을 나타내지 않습니다. |
~/.토토 사이트/root.crt |
신뢰할 수 있는 인증 기관 | 서버 인증서가 신뢰할 수 있는 인증 기관에 의해 서명되었는지 확인 |
~/.토토 사이트/root.crl |
인증 기관에 의해 취소된 인증서 | 서버 인증서가 이 목록에 있어서는 안 됩니다 |
애플리케이션이 초기화되는 경우libssl및/또는libcrypto라이브러리 및libpq다음으로 구축됨SSL지원, 전화로 문의하세요PQinitOpenSSL말하다libpq그것은libssl및/또는libcrypto라이브러리가 귀하의 응용 프로그램에 의해 초기화되었으므로libpq또한 해당 라이브러리를 초기화하지 않습니다. 그러나 다음을 사용하는 경우에는 필요하지 않습니다.오픈SSL버전 1.1.0 이상, 중복 초기화는 더 이상 문제가 되지 않습니다.
PQinitOpenSSL애플리케이션이 초기화할 보안 라이브러리를 선택할 수 있도록 허용합니다.
void PQinitOpenSSL(int do_ssl, int do_crypto);
언제do_ssl0이 아닙니다.libpq초기화하겠습니다오픈SSL데이터베이스 연결을 처음 열기 전에 라이브러리. 언제do_crypto0이 아닙니다.libcrypto라이브러리가 초기화됩니다. 기본적으로(ifPQinitOpenSSL호출되지 않음), 두 라이브러리가 모두 초기화됩니다. SSL 지원이 컴파일되지 않은 경우 이 함수는 존재하지만 아무 작업도 수행하지 않습니다.
응용 프로그램이 둘 중 하나를 사용하고 초기화하는 경우오픈SSL또는 그 기본libcrypto도서관, 당신반드시먼저 데이터베이스 연결을 열기 전에 적절한 매개변수에 대해 0을 사용하여 이 함수를 호출하세요. 또한 데이터베이스 연결을 열기 전에 초기화를 완료했는지 확인하세요.
PQinitSSL응용프로그램이 초기화할 보안 라이브러리를 선택할 수 있도록 허용합니다.
void PQinitSSL(int do_ssl);
이 함수는 다음과 같습니다.PQinitOpenSSL(do_ssl, do_ssl). 둘 다 초기화하거나 둘 다 초기화하지 않는 애플리케이션에는 충분합니다.오픈SSL그리고libcrypto.
PQinitSSL이후부터 존재했습니다.토토 사이트8.0, 동안PQinitOpenSSL추가되었습니다토토 사이트8.4, 그러니까PQinitSSL이전 버전에서 작동해야 하는 애플리케이션에 적합할 수 있습니다.libpq.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.