4.5. PostgreSQL サーバーにおける TLS 暗号化の設定
デフォルトでは、PostgreSQL は暗号化されていない接続を使用します。よりセキュアな接続のために、PostgreSQL サーバーで Transport Layer Security (TLS) サポートを有効にし、暗号化された接続を確立するようにクライアントを設定できます。
前提条件
- TLS 秘密鍵を作成済みであり、かつ認証局 (CA) によって PostgreSQL サーバー用のサーバー証明書が発行されている。
- PostgreSQL サーバーがインストールされている。
- データベースクラスターが初期化されている
- サーバーが RHEL 9.2 以降を実行し、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/秘密鍵と証明書の所有権を設定します。
# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}PostgreSQL サーバーのみがファイルを読み取れるように、サーバー証明書のパーミッションを設定します。
# chmod 0400 /var/lib/pgsql/data/server.key証明書は、セキュアな接続が確立される前は通信の一部であるため、任意のクライアントは認証なしで証明書を取得できます。したがって、サーバー証明書ファイルに厳密なパーミッションを設定する必要はありません。
/var/lib/pgsql/data/postgresql.confファイルを編集し、次の変更を加えます。scram-sha-256ハッシュアルゴリズムを設定します。password_encryption = scram-sha-256TLS 暗号化を有効にします。
ssl = on
/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-256postgresqlサービスを再起動します。# systemctl restart postgresql.service
検証
postgresスーパーユーザーを使用して PostgreSQL サーバーに接続し、\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)