SSL証明書 · 1 min read · Dec 15, 2025

PostgreSQLのSSL証明書

PostgreSQLのSSL証明書

これは、PgAdminからクライアントマシンのPostgreSQLサーバーマシンへの暗号化接続を有効にするためのSSL証明書の設定方法を説明します。前提条件として、PostgreSQL(SSLサポートでコンパイル済み)とOpenSSLがサーバー(Linux)に既にインストールされ、機能していることが必要です。PgAdminはクライアント(WindowsまたはLinuxのいずれか)に既にインストールされています。

サーバーには、データディレクトリに3つの証明書が必要です。CentOSのデフォルトは/var/lib/pgsql/data/です:
root.crt(信頼されたルート証明書)
server.crt(サーバー証明書)
server.key(秘密鍵)

コマンドはrootとして実行します。

sudo -
cd /var/lib/pgsql/data

秘密鍵を生成します(パスフレーズを提供する必要があります)。

openssl genrsa -des3 -out server.key 1024

パスフレーズを削除します。

openssl rsa -in server.key -out server.key

秘密鍵ファイルに適切な権限と所有者を設定します。

chmod 400 server.key  
chown postgres.postgres server.key

サーバー証明書を作成します。
-subjは情報の入力を促すのを避けるためのショートカットです。
-x509は証明書要求ではなく自己署名証明書を生成します。

openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'

自己署名しているため、サーバー証明書を信頼されたルート証明書として使用します。

cp server.crt root.crt

pg_hba.confを編集する必要があります。例えば:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local"はUnixドメインソケット接続専用です
local   all         all                               trust
# IPv4ローカル接続:
host    all         all         127.0.0.1/32          trust  
  
# 認証されたユーザーのためのIPv4リモート接続
hostssl all         www-data    0.0.0.0/0             md5 clientcert=1  
hostssl all         postgres    0.0.0.0/0             md5 clientcert=1

実際にSSLを有効にするためにpostgresql.confを編集する必要があります:

ssl = on

PostgreSQLサーバーを再起動する必要があります。

/etc/init.d/postgresql restart

サーバーが(再)起動に失敗した場合は、CentOSのデフォルトである/var/lib/pgsql/pgstartup.logのPostgreSQLスタートアップログを確認して理由を調べてください。

クライアントには、3つのファイルが必要です。Windowsの場合、これらのファイルは%appdata%\postgresql\ディレクトリに配置する必要があります。Linuxの場合は~/.postgresql/ディレクトリです。
root.crt(信頼されたルート証明書)
postgresql.crt(クライアント証明書)
postgresql.key(秘密鍵)

サーバーマシンで必要なファイルを生成し、それをクライアントにコピーします。必要なファイルは/tmp/ディレクトリに生成します。

まず、クライアントマシン用の秘密鍵postgresql.keyを作成し、パスフレーズを削除します。

openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key

次に、証明書postgresql.crtを作成します。これは、信頼されたルート(サーバーマシンの秘密鍵ファイルを使用)によって署名される必要があります。また、証明書のコモンネーム(CN)は、接続するデータベースユーザー名に設定する必要があります。

openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial

サーバーの/tmp/ディレクトリからクライアントマシンに作成した3つのファイルをコピーします。

サーバーマシンからクライアントマシンに信頼されたルート証明書root.crtをコピーします(Windows pgadminの場合は%appdata%\postgresql\、Linux pgadminの場合は~/.postgresql/)。postgresql.keyのファイル権限を変更して、あなたのみにアクセスを制限します(Windowsでは、制限されたアクセスが既に継承されているため、必要ないかもしれません)。サーバーの/tmp/ディレクトリからファイルを削除します。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。