はじめに
PostgreSQLは暗号化通信(SSL/TLS)をサポートしており、これによりサーバーとクライアント間の通信を暗号化してセキュリティを向上させることができます。本記事では、Windows環境でPostgreSQLの暗号化通信を設定する手順を解説します。
前提条件
- PostgreSQLがWindowsにインストールされていること
- OpenSSLがインストールされていること(SSL証明書の作成に必要)
手順
1. OpenSSLのインストール
まず、OpenSSLをインストールして、SSL証明書を生成できる環境を整えます。
OpenSSLインストール手順:
- OpenSSL公式サイトからWindows用のOpenSSLをダウンロードし、インストールします。
- コマンドプロンプトを開き、OpenSslの
bin
ディレクトリ(例:C:\Program Files\OpenSSL-Win64\bin
)に移動します。 - コマンドプロンプトで以下のコマンドを実行し、OpenSSLのインストールが成功したか確認します。
C:\Program Files\OpenSSL-Win64\bin>openssl version
結果
OpenSSL 3.4.0 22 Oct 2024 (Library: OpenSSL 3.4.0 22 Oct 2024
2. SSL証明書と秘密鍵の生成
次に、PostgreSQL用のサーバー証明書と秘密鍵を生成します。以下はOpenSSLを使ってこれらを生成する手順です。
証明書と鍵の生成手順:
- コマンドプロンプトを開き、OpenSslの
bin
ディレクトリ(例:C:\Program Files\OpenSSL-Win64\bin
)に移動します。 - 秘密鍵を生成します。
openssl genrsa -out server.key 2048
- サーバー証明書署名要求(CSR)を生成します。
openssl req -new -key server.key -out server.csr
- 自己署名証明書を生成します(有効期限は365日間)。
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365
3. PostgreSQLの設定変更
生成したserver.key
とserver.crt
を適切な場所に配置し、PostgreSQLをSSL/TLS通信対応に設定します。
設定ファイルの変更手順:
- 生成した
server.key
とserver.crt
をPostgreSQLのdata
ディレクトリにコピーします。 - PostgreSQLの設定ファイル
postgresql.conf
を開き、以下のパラメータを編集または追加してSSLを有効にします。
sslmode = 'on'ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
- 接続許可設定ファイル
pg_hba.conf
を編集し、クライアントのSSL接続を許可します。たとえば、全てのIPアドレスからのSSL接続を許可する設定は次のようになります。
hostssl all all 0.0.0.0/0 scram-sha-256
ネットワーク環境に応じて、適切なIPアドレス範囲や認証方法を指定してください。
4. PostgreSQLサービスの再起動
設定ファイルを編集したら、PostgreSQLサーバーを再起動します。Windowsでは、コマンドプロンプトで次のコマンドを使用してサービスを再起動できます。
net stop <PostgreSQLのサービス名>
net start <PostgreSQLのサービス名>
サービス名は「postgresql-x64-<バージョン>」などになります。
5. クライアントの接続設定
クライアントがPostgreSQLサーバーに対してSSL接続を行うためには、接続時にsslmode
オプションを指定します。
例えば、psql
コマンドを使用してSSL接続を行うには、次のように指定します。
psql "sslmode=require host=<サーバーのアドレス> dbname=<データベース名> user=<ユーザー名> password=<パスワード>"
結果
psql (16.4)
SSL接続(プロトコル: TLSv1.3、暗号化方式: TLS_AES_256_GCM_SHA384、圧縮: オフ)
"help"でヘルプを表示します。
sslmode
にrequire
を指定することで、SSLが必須となり、暗号化された通信が行われます。
6. SSL接続の確認
SSL接続が正常に機能しているかを確認するために、PostgreSQLに接続して次のSQLコマンドを実行します。
SHOW ssl;
結果がon
であれば、PostgreSQLサーバーはSSL接続を使用していることを示します。
まとめ
PostgreSQLで暗号化通信を設定することにより、データの安全性が向上し、ネットワーク経由の攻撃からデータを守ることができます。Windows環境でのTLS設定手順を紹介しましたが、証明書管理やネットワーク環境に応じて、より高度な設定を行うことも可能です。暗号化通信を有効にして、安心してPostgreSQLを利用しましょう。
コメント