Windows版 PostgreSQL 暗号化通信設定ガイド

はじめに

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を使ってこれらを生成する手順です。

証明書と鍵の生成手順:

  1. コマンドプロンプトを開き、OpenSslのbinディレクトリ(例:C:\Program Files\OpenSSL-Win64\bin)に移動します。
  2. 秘密鍵を生成します。
openssl genrsa -out server.key 2048
  1. サーバー証明書署名要求(CSR)を生成します。
openssl req -new -key server.key -out server.csr
  1. 自己署名証明書を生成します(有効期限は365日間)。
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365

3. PostgreSQLの設定変更

生成したserver.keyserver.crtを適切な場所に配置し、PostgreSQLをSSL/TLS通信対応に設定します。

設定ファイルの変更手順:

  1. 生成したserver.keyserver.crtをPostgreSQLのdataディレクトリにコピーします。
  2. PostgreSQLの設定ファイルpostgresql.confを開き、以下のパラメータを編集または追加してSSLを有効にします。
sslmode = 'on'
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
  1. 接続許可設定ファイル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"でヘルプを表示します。

sslmoderequireを指定することで、SSLが必須となり、暗号化された通信が行われます。

6. SSL接続の確認

SSL接続が正常に機能しているかを確認するために、PostgreSQLに接続して次のSQLコマンドを実行します。

SHOW ssl;

結果がonであれば、PostgreSQLサーバーはSSL接続を使用していることを示します。

まとめ

PostgreSQLで暗号化通信を設定することにより、データの安全性が向上し、ネットワーク経由の攻撃からデータを守ることができます。Windows環境でのTLS設定手順を紹介しましたが、証明書管理やネットワーク環境に応じて、より高度な設定を行うことも可能です。暗号化通信を有効にして、安心してPostgreSQLを利用しましょう。

コメント

タイトルとURLをコピーしました