SSL 모드에서 PostgreSQL에 연결

Shihab Sikder 2023년10월12일
SSL 모드에서 PostgreSQL에 연결

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 avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website