HOWTO · PostgreSQL
SSL 모드에서 PostgreSQL에 연결
클라이언트와 포스트그레스 서버 간의 연결을 암호화하려면 포스트그레스에서 SSL 모드를 사용해야 합니다. 보안 데이터베이스이므로 HTTPS를 통해 연결을 시도할 때마다 SSL 모드를 사용해야 합니다.
Postgres는 데이터베이스 연결을 시도할 때 SSL을 사용하여 연결 보안을 확인합니다. HTTP에서는 기본적으로 비활성화되어 있지만 HTTPS에서는 Postgres 데이터베이스에서 작업을 수행하려면 SSL 연결 모드가 필요합니다.
연결이 비공개가 아닌 경우 여러 공격 매개변수가 있을 수 있습니다. 데이터베이스 요청-응답을 통해 누구나 쉽게 스니핑 도구를 사용할 수 있습니다.
PostgreSQL의 SSL 모드란?
Postgres는 다양한 유형의 SSL 모드를 제공합니다. 먼저 Postgres의 일반 연결 문자열을 살펴보겠습니다.
const connectionString =
'postgres://<database_username>:<database_userpassword>@<hostaddress>:<port_no>/<database_name>'
이제 다음과 같이 sslmode 매개변수를 추가할 수 있습니다.
const connectionString =
'postgres://<database_username>:<database_userpassword>@<hostaddress>:<port_no>/<database_name>?sslmode=<ssl_mode>'
다음은 Postgres에서 제공하는 SSL 모드 목록입니다.
sslmode |
도청 보호 | MITM 보호 | 설명 |
|---|---|---|---|
disable |
아니 | 아니 | 보안은 신경 쓰지 않을 것입니다. 데이터가 암호화되지 않습니다. |
allow |
아마도 | 아니 | 보안에 신경 쓰지 않고 연결을 암호화합니다. |
prefer |
아마도 | 아니 | 암호화를 강제로 사용하지 않습니다. 서버가 암호화 오버헤드를 지원하는 경우 암호화됩니다. |
require |
예 | 아니 | 데이터를 암호화하면 암호화 오버헤드가 발생하고 네트워크는 사용자가 연결하려는 올바른 서버를 보장합니다. |
verify-ca |
예 | CA 정책에 따라 다름 | 암호화 오버헤드인 데이터를 암호화하고 항상 신뢰할 수 있는 서버에 연결합니다. |
verify-full |
예 | 예 | 데이터가 암호화되고 사용자가 오버헤드를 수락하며 네트워크와 서버가 모두 신뢰할 수 있으며 요청된 특정 서버에만 연결됩니다. |
환경 변수에서 이 플래그를 설정할 수도 있습니다.
PGSSLMODE=verify-full PGSSLROOTCERT=ca.pem
여기에서 ca.pem이 핵심입니다. CA에서 수집해야 합니다. CA는 인증 기관을 나타냅니다.
Postgres SSL 모드로 서버를 완전히 구성하려면 이 블로그의 단계를 따르세요.
다음은 SSL 모드에 관한 Postgres 공식 문서의 참고 사항입니다.
Using NULL-SHA or NULL-MD5 ciphers, authentication can be done without any encryption overhead. A man-in-the-middle, on the other hand, might read and pass communications between the client and the server. In addition, as compared to the overhead of authentication, encryption has a low overhead. NULL ciphers are not recommended for these reasons.
또한 여기에서 공식 문서를 볼 수 있습니다. SSL 모드를 사용하면서 인증서를 자체 서명하는 방법을 보여주었습니다.