[pgpool-general-jp: 1610] pgpool-IIにおけるクライアント証明書による認証につきまして
Egashira, Yusuke
egashira.yusuke @ jp.fujitsu.com
2019年 9月 6日 (金) 18:30:13 JST
江頭と申します。
いつもお世話になっております。
pgpool-IIにおけるクライアント認証につきまして、教えて下さい。
現在、データベース<->アプリケーション間で
クライアント証明書によるクライアント認証を実施しており、
その間にpgpoolをかませることを検討しています。
要件上、以下のようにpgpoolとアプリを同一サーバ上に配置して
DBサーバへの接続を行おうとしているのですが、
クライアント認証がうまく通りません。
------------- -----------------------
| DBサーバ <--|-|--> pgpool <--> アプリ |
------------- -----------------------
pgpoolとアプリケーション間でのクライアント証明書による認証は
V4.0より対応されているようですが、
DBサーバとのクライアント証明書による認証は
どのようにセットアップすれば利用できるのでしょうか?
マニュアルやFAQも参照しましたが、
DBサーバ(バックエンド)との間でのクライアント証明書による認証の設定については
記載を見つけることが出来ませんでした。
手探りで進めておりましたがどうしても接続に至らない(*)ため
質問させていただいております。
*: DBサーバ側のログに "FATAL: connection requires a valid client certificate" と出て接続が失敗します。
# もしかして、pgpoolではDBサーバのクライアント証明書認証には対応していないのでしょうか?
証明書は以下を参考にopensslコマンドにより作成したものを使用して検証しています。
-> https://pgpool.net/mediawiki/jp/index.php/FAQ#pgpool-II_.E3.81.AE_SSL_.E8.A8.AD.E5.AE.9A.E3.81.AF.E3.81.A9.E3.81.86.E3.81.99.E3.82.8C.E3.81.B0.E3.82.88.E3.81.84.E3.81.A7.E3.81.99.E3.81.8B.EF.BC.9F
サーバ証明書: server.crt => root.crt という名前でコピーし、アプリ側の~/.postgresql/ 内にも配置。
サーバ秘密鍵: server.key
クライアント証明書: postgresql.crt => root.crt という名前でコピーし、DBインスタンス内にも配置。
クライアント秘密鍵: postgresql.key
[DBサーバのpostgresql.conf]
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'root.crt'
[DBサーバのpg_hba.conf]
hostssl all all 0.0.0.0/0 cert clientcert=1
[pgpool.conf]
ssl = on
ssl_key = '/home/pool/.postgresql/postgresql.key'
ssl_cert = '/home/pool/.postgresql/postgresql.crt'
ssl_ca_cert = '/home/pool/.postgresql/root.crt'
enable_pool_hba = off
上記設定にてpgpool経由でDBへ接続しようとするとエラーとなります。
- psql "host=localhost port=9999 user=egashira dbname=egashira"
-> FATAL: connection requires a valid client certificate
- psql "host=localhost port=9999 user=egashira dbname=egashira sslmode=verify-ca"
-> psql: SSLエラー: certificate verify failed
- psql "host=localhost port=9999 user=egashira dbname=egashira sslmode=verify-ca sslcert=/home/pool/.postgresql/postgresql.crt sslkey=/home/pool/.postgresql/postgresql.key sslrootcert=/home/pool/.postgresql/root.crt"
-> psql: SSLエラー: certificate verify failed
なお、pgpool.confと同じ指定にてpsqlを用いて直接DBサーバへ接続試行した場合、
DBサーバに接続できることは確認できています。
----
$ psql "host=sv1 port=5432 user=egashira dbname=egashira sslmode=verify-ca sslcert=/home/pool/.postgresql/postgresql.crt sslkey=/home/pool/.postgresql/postgresql.key sslrootcert=/home/pool/.postgresql/root.crt"
psql (10.10)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
egashira=#
----
以上、よろしくお願いします。
-------------------------------------------------
富士通(株)
データマネジメント事業部 第二開発部
江頭 勇佑 (Egashira Yusuke)
egashira.yusuke @ jp.fujitsu.com
TEL 外線:078-414-8597 内線:72-6069-4033
-------------------------------------------------
pgpool-general-jp メーリングリストの案内