- PR -

postgresql-8.1.0でのssl設定について

1
投稿者投稿内容
わか
常連さん
会議室デビュー日: 2003/12/14
投稿数: 47
お住まい・勤務地: 広島市
投稿日時: 2005-12-04 14:55
お世話になります、わかです。

サーバ機で動作中のpostgresql-8.1.0に
クライアントからpgAdminIIIでSSLを使用して接続したいと考えています。

下記の手順を試しましたが、
pgAdminIIIからの接続時に
「Error connecting to the server: SSL error: sslv3 alert handshake failure」
と表示され接続することができません。

サーバのログには
「could not accept SSL connection: peer did not return a certificate」
と出力されます。

googleなどで検索しましたが、
未熟者のため、有用なヒントを見つけることができませんでした。

同様の事象を解決された方から、お知恵をお借りできればと思います。

==環境==
サーバ
Red Hat Enterprise Linux 3 Update 6 ES (x86)
postgresql-8.1.0

クライアント
windows XP pro
pgAdminIII 1.2.0
======

postgresql-8.1.0のconfigオプション
# ./configure ¥
--enable-syslog ¥
--with-openssl ¥
--with-includes=/usr/kerberos/include
(書き込みの都合上、半角¥を全角に変換しています)

postgresql-8.1.0のinitdb
$ initdb -E EUC_JP --no-locale -D /usr/local/pgsql/data

pg_hba.confの内容
hostssl all all ???.???.???.??? 255.255.255.255 password
hostssl all all 0.0.0.0 0.0.0.0 reject
host all all 0.0.0.0 0.0.0.0 reject
(???.???.???.???はpgAdminIIIで接続するためのクライアントIPアドレスです)

postgresql.confの内容(デフォルトからの変更点のみ)
listen_addresses = '*'
port = 5432
ssl = on
log_destination = 'syslog'

ssl関連のファイルは
http://www.rccm.co.jp/~juk/pgsql/Using-SSL_on_8.0.txt
を参考にしました。

不足する情報がありましたら、ご指摘いただければ幸いです。
よろしくお願いいたします。

## 2005.12.4 14:56 動作状況について追記
sshにてサーバ機にログイン後、
postgresユーザにてpsqlコマンドを使った操作は
(create user, create tablespace, create database, create tableなど)
問題なく行うことができます。

また、sslを使用しないpgAdminIIIからの操作も
問題なく行うことができます。

## 2005.12.4 18:05 postgresql-7.4.xの場合について追記
以前にpostgresql-7.4.x において、

configオプション
#./configure ¥
--enable-multibyte=EUC_JP ¥
--enable-syslog ¥
--with-java ¥
--with-openssl=/usr/local/openssl
(書き込みの都合上、半角¥を全角に変換しています)

のようにして、上記と同様のことを実現しておりました。
この場合、今回のようにクライアントの証明書は要求されませんでした。

postgresql-8.1.0 で、同様のconfigオプションを使うと
「checking whether to build with OpenSSL support... configure: error: no argument expected for --with-openssl option」
となり、confugureでエラーとなりました。

次に、
configオプション
#./configure ¥
--enable-multibyte=EUC_JP ¥
--enable-syslog ¥
--with-java ¥
--with-openssl
(書き込みの都合上、半角¥を全角に変換しています)

とすると
「configure: error: header file <openssl/ssl.h> is required for OpenSSL」
となり、エラーとなりました。


[ メッセージ編集済み 編集者: わか 編集日時 2005-12-04 18:53 ]
わか
常連さん
会議室デビュー日: 2003/12/14
投稿数: 47
お住まい・勤務地: 広島市
投稿日時: 2005-12-04 19:14
解決しました。

原因は
/usr/local/pgsql/data/ 以下に
root.crt
を作成したためでした。
(root.crtはserver.crtをコピーして作っていました)

/usr/local/pgsql/data/ に作成するSSL関連のファイルを下記の2つとすることで
目的の動作を実現できました。
(参考としたURLにも下記の2つしか記載がありませんでした)
server.crt
server.key

今回、なぜroot.crtを作成したかというと、
以前使用していたpostgres-7.4.xの環境では、root.crtが存在しても
クライアント証明の要求がなかったためです。

# pgsqlメーリングリストの「pgsql-jp: 35831」にて
# 私が回答した際の環境がまさにそうでした。

公式リファレンス
http://www.postgresql.jp/document/pg810doc/html/ssl-tcp.html
によると、

「root.crtが存在しない場合、クライアント証明は要求されませんし、検査もされません。 このモードでは、SSLは通信セキュリティを提供しますが、認証は提供しません。」

とのことですので、今回のように通信経路の暗号化のみが目的の場合、
root.crtを作成しないのが正解のようです。

どなたかのご参考になれば幸いです。
最後までお読みいただき、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)