3.5. PostgreSQL サーバーにおける TLS 暗号化の設定
デフォルトでは、PostgreSQL は暗号化されていない接続を使用します。よりセキュアな接続のために、PostgreSQL サーバーで Transport Layer Security (TLS) サポートを有効にし、暗号化された接続を確立するようにクライアントを設定できます。
前提条件
- TLS 秘密鍵を作成し、認証局 (CA) が PostgreSQL サーバーのサーバー証明書を発行している。
- PostgreSQL サーバーがインストールされている。
- データベースクラスターが初期化されている。
- FIPS モードが有効になっている場合、クライアントは Extended Master Secret (EMS) 拡張機能をサポートするか、TLS 1.3 を使用する必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced on RHEL 9.2 and later を参照してください。
手順
秘密鍵とサーバー証明書を
/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
ハッシュアルゴリズムを使用するように認証エントリーを更新します。たとえば、TLS 暗号化を有効にするには、host
エントリーをhostssl
に変更し、最後の列に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
メタコマンドを実行します。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