[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 メーリングリストの案内