SSL 모드에서 PostgreSQL에 연결
Shihab Sikder
2023년10월12일
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 모드를 사용하면서 인증서를 자체 서명하는 방법을 보여주었습니다.
작가: Shihab Sikder