3.5. PostgreSQL 서버에서 TLS 암호화 구성
기본적으로 PostgreSQL은 암호화되지 않은 연결을 사용합니다. 보안 연결을 위해 PostgreSQL 서버에서 TLS(Transport Layer Security) 지원을 활성화하고 암호화된 연결을 설정하도록 클라이언트를 구성할 수 있습니다.
사전 요구 사항
- TLS 개인 키를 생성하고 CA(인증 기관)에서 PostgreSQL 서버의 서버 인증서를 발급했습니다.
- PostgreSQL 서버가 설치되어 있어야 합니다.
- 데이터베이스 클러스터가 초기화됩니다.
- FIPS 모드가 활성화된 경우 클라이언트는 확장 마스터 시크릿(Extended Master Secret) 확장을 지원하거나 TLS 1.3을 사용해야 합니다. TLS 1.2 연결이 없는 경우 실패합니다. 자세한 내용은 RHEL 9.2 이상에 적용된 Red Hat Knowledgebase 솔루션 TLS 확장 "확장 마스터 시크릿"을 참조하십시오.
프로세스
개인 키와 서버 인증서를
/var/lib/pgsql/data/
디렉터리에 저장합니다.cp server.{key,crt} /var/lib/pgsql/data/
# cp server.{key,crt} /var/lib/pgsql/data/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 개인 키 및 인증서의 소유권을 설정합니다.
chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL 서버만 파일을 읽을 수 있도록 하는 서버 인증서에 대한 권한을 설정합니다.
chmod 0400 /var/lib/pgsql/data/server.key
# chmod 0400 /var/lib/pgsql/data/server.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인증서는 보안 연결이 설정되기 전에 통신의 일부이므로 모든 클라이언트는 인증 없이 이를 검색할 수 있습니다. 따라서 서버 인증서 파일에 대한 엄격한 권한을 설정할 필요가 없습니다.
/var/lib/pgsql/data/postgresql.conf
파일을 편집하고 다음과 같이 변경합니다.scram-sha-256
해시 알고리즘을 설정합니다.password_encryption = scram-sha-256
password_encryption = scram-sha-256
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TLS 암호화를 활성화합니다.
ssl = on
ssl = on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/var/lib/pgsql/data/pg_hba.conf
파일을 편집하고 TLS 암호화 및scram-sha-256
해시 알고리즘을 사용하도록 인증 항목을 업데이트합니다. 예를 들어호스트
항목을hostssl
으로 변경하여 TLS 암호화를 활성화하고 마지막 열에서scram-sha-256
해시 알고리즘을 설정합니다.hostssl all all 192.0.2.0/24 scram-sha-256
hostssl all all 192.0.2.0/24 scram-sha-256
Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql
서비스를 다시 시작합니다.systemctl restart postgresql.service
# systemctl restart postgresql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
postgres
슈퍼 사용자를 사용하여 PostgreSQL 서버에 연결하고\conninfo
meta 명령을 실행합니다.psql "postgresql://postgres@localhost:5432" -c '\conninfo'
# psql "postgresql://postgres@localhost:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow