[pgsql-jp: 37611] Re: JAVAアプリケーションからのSSL接続

Masatoshi Sato okome @ siisise.net
2006年 10月 23日 (月) 18:20:55 JST


おこめです。

岩瀬 肇 wrote:
> 岩瀬です。
> 
> おこめ様、コメントありがとうございます。
> 結論から言うと、まだうまくできていません。
> 
 > 一つ分かったことは、サーバのdataフォルダ配下に置いてある、
> server.crtと同じroot.crtファイルを消した場合、
> 接続できるようになりました。
> ただ、本当にSSL接続できているのか?まではまだ確認できていません。
> 以下のマニュアルを確認すると、
> http://www.postgresql.jp/document/pg803doc/html/ssl-tcp.html
> root.crtが無い場合、クライアントの認証は行わないと書いてある
> ので、クライアントの証明書が何らかの理由で認証できていないようだと
> いうところまではわかりました。
> 
> 正直行き詰まっています。根本的にOpenSSLの処理が分かっていないのも
> 問題だと感じており、OpenSSLについても調査が必要なのかとも考えています。
> 
> すいません、何か他にアドバイスがあればお願い致します。

サーバの証明書だけ見てクライアントはパスワードだけの認証で接続していました。
クライアント認証については別の設定も必要になるので調べてみました。

クライアントの認証はクライアントの keystore をサーバの鍵とは別に作成し
て、その証明書をサーバの root.crt に置きます。

■鍵生成
keytool -genkey -alias client1 -keystore client.keystore
などなど。
キーストアと鍵のパスワードは同じにしておきます。
パスワード以外はとりあえず何でもいいと思います。

■証明書作成
鍵の証明書をファイルに書き出します。

keytool -export -rfc -alias client1 -flie root.crt -keystore client.keystore

別の鍵で署名してもかまいませんし、クライアントが1つであれば、
書き出したファイルをそのままサーバの root.crt に置きます。

■実行パラメータ
java のパラメータでクライアントのkeystoreとパスワードを指定します。

-Djavax.net.ssl.keyStore=client.keystore
-Djavax.net.ssl.keyStorePassword=keystorepassword

サーバの証明書をcacerts以外に入れている場合は

-Djavax.net.ssl.trustStore=cert.keystore
-Djavax.net.ssl.trustStorePassword=certpassword

でサーバ証明書の入っている keystoreファイルとkeystoreのパスワードも指定
します。

サーバの証明書だけを指定してクライアントの鍵を指定してなかったので接続で
きなかったのでしょうね。
これでクライアント認証もできましたが、どうでしょうか?

-- 
佐藤 雅俊 (おこめ)
okome @ siisise.net okome @ mozilla.gr.jp
http://siisise.net/



pgsql-jp メーリングリストの案内