手順通りにすれば、簡単にPostgreSQLをSSLに対応できます。
動作環境
OS | CentOS 6.4 |
PostgreSQL | 9.3.2 |
OpenSSL | 1.0.1e-fips 11 Feb 2013 |
自己証明書を作成する
1.PostgreSQLのdataディレクトリに移動する
$ cd /var/lib/pgsql/9.3/data
# 2048はビット数 $ openssl genrsa 2048 > server.key
3.OpenSSLでCSRを作成する
$ openssl req -new -key server.key > server.csr
4.OpenSSLで証明書を作成する
# 36500は有効期限(この場合100年) $ openssl x509 -days 36500 -req -signkey server.key < server.csr > server.crt
5.作成したファイルの所有権・グループを変更する
$ chown postgres:postgres server.*
6.server.keyのアクセス権限を変更する
$ chmod 600 server.key
PostgreSQLの設定を変更する
1.pg_hba.confでアクセス権を変更する
$ vi /var/lib/pgsql/9.3/data/pg_hba.conf # IPv4 local connections: host all all 127.0.0.1/32 md5 # ローカルはSSL不要 hostssl all all 0.0.0.0/0 md5 # リモートはSSL必須
2.postgresql.confでSSLを有効にする
$ vi /var/lib/pgsql/9.3/data/postgresql.conf # コメントアウトされているので、コメントを外し「ssl = on」にする # ssl = off ssl = on
3.設定を有効にするためPostgreSQLを再起動する
$ service postgresql-9.3 restart
注意事項
TomcatやGlassFishなどのアプリケーションサーバーを利用している場合、PostgreSQLを再起動する前に停止しておく必要があります。
起動したままだと、データベースとの連携が行われなくなり接続エラーが発生します。
PostgreSQLの再起動が失敗した場合、エラーメッセージがログに出力されるので、そちらを参照し問題点を修正して下さい。
pg_logディレクトリ内に発生曜日ごとにログがあります。
/var/lib/pgsql/9.3/data/pg_log
SSL設定後のPostgreSQLへの接続
psqlコマンドで接続する場合、接続情報を「""」で括り、「sslmode=require
」を追加します。
psql "sslmode=require host=xxx.xxx.xxx.xxx user=user1 dbname=db1"
SSL設定後のアプリケーション側での接続文字列変更
.NET
接続文字列に「SSL Mode = Require; Trust Server Certificate = true;
」を追加します。
Host=xxx.xxx.xxx;Database=dbname;Username=user;Password=pass;SSL Mode=Require;Trust Server Certificate=True
PostgreSQLを深く知るためにおすすめの書籍
内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)
- 作者: 勝俣智成,佐伯昌樹,原田登志
- 出版社/メーカー: 技術評論社
- 発売日: 2014/09/04
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
- 作者: 鈴木啓修
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/16
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 14回
- この商品を含むブログ (5件) を見る