SSL 인증서 · 2 min read · Dec 15, 2025

PostgreSQL을 위한 SSL 인증서

PostgreSQL을 위한 SSL 인증서

이 문서에서는 PgAdmin을 사용하여 클라이언트 머신에서 PostgreSQL 서버 머신으로 암호화된 연결을 활성화하기 위해 SSL 인증서를 설정하는 방법을 설명합니다. PostgreSQL(SSL 지원으로 컴파일됨)과 OpenSSL이 서버(Linux)에 이미 설치되어 있고 작동 중이라는 가정하에 작성되었습니다. PgAdmin은 클라이언트(Windows 또는 Linux)에 이미 설치되어 있습니다.

서버에서는 데이터 디렉토리에 세 개의 인증서가 필요합니다. CentOS의 기본 경로는 /var/lib/pgsql/data/:
root.crt (신뢰할 수 있는 루트 인증서)
server.crt (서버 인증서)
server.key (개인 키)

루트 사용자로 명령을 실행하십시오.

sudo -
cd /var/lib/pgsql/data

개인 키를 생성합니다(비밀번호를 제공해야 합니다).

openssl genrsa -des3 -out server.key 1024

비밀번호를 제거합니다.

openssl rsa -in server.key -out server.key

개인 키 파일에 적절한 권한과 소유자를 설정합니다.

chmod 400 server.key  
chown postgres.postgres server.key

서버 인증서를 생성합니다.
-subj는 정보를 입력하라는 프롬프트를 피하기 위한 단축키입니다.
-x509는 인증서 요청이 아닌 자체 서명된 인증서를 생성합니다.

openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'

우리는 자체 서명하고 있으므로, 서버 인증서를 신뢰할 수 있는 루트 인증서로 사용합니다.

cp server.crt root.crt

pg_hba.conf를 편집해야 합니다. 예를 들어:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local"은 Unix 도메인 소켓 연결 전용입니다.
local   all         all                               trust
# IPv4 로컬 연결:
host    all         all         127.0.0.1/32          trust  
  
# 인증된 사용자를 위한 IPv4 원격 연결
hostssl all         www-data    0.0.0.0/0             md5 clientcert=1  
hostssl all         postgres    0.0.0.0/0             md5 clientcert=1

실제로 SSL을 활성화하려면 postgresql.conf를 편집해야 합니다:

ssl = on

PostgreSQL 서버를 재시작해야 합니다.

/etc/init.d/postgresql restart

서버가 (재)시작되지 않으면, CentOS의 기본 경로인 /var/lib/pgsql/pgstartup.log에서 PostgreSQL 시작 로그를 확인하여 이유를 찾으십시오.

클라이언트에서는 세 개의 파일이 필요합니다. Windows의 경우 이 파일들은 %appdata%\postgresql\ 디렉토리에 있어야 합니다. Linux의 경우 ~/.postgresql/ 디렉토리에 있어야 합니다.
root.crt (신뢰할 수 있는 루트 인증서)
postgresql.crt (클라이언트 인증서)
postgresql.key (개인 키)

서버 머신에서 필요한 파일을 생성한 후 클라이언트로 복사합니다. /tmp/ 디렉토리에서 필요한 파일을 생성합니다.

먼저 클라이언트 머신을 위한 개인 키 postgresql.key를 생성하고 비밀번호를 제거합니다.

openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key

그런 다음 인증서 postgresql.crt를 생성합니다. 이 인증서는 신뢰할 수 있는 루트(서버 머신의 개인 키 파일을 사용)로 서명되어야 합니다. 또한 인증서의 공통 이름(CN)은 우리가 연결할 데이터베이스 사용자 이름으로 설정해야 합니다.

openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial

서버 /tmp/ 디렉토리에서 생성한 세 개의 파일을 클라이언트 머신으로 복사합니다.

서버 머신에서 클라이언트 머신으로 신뢰할 수 있는 루트 인증서 root.crt를 복사합니다(Windows pgadmin의 경우 %appdata%\postgresql\ 또는 Linux pgadmin의 경우 ~/.postgresql/). postgresql.key의 파일 권한을 변경하여 본인만 접근할 수 있도록 제한합니다(Windows에서는 이미 제한된 접근이 상속되므로 아마 필요하지 않을 것입니다). 서버 /tmp/ 디렉토리에서 파일을 제거합니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.