PostgreSQLは、セキュリティを高めるためにクライアントサーバ間の通信を暗号化するSSL接続の使用を元来サポートしています。 サーバ側のSSL機能についての詳細は項17.8を参照してください。
libpqはシステム全体に対するOpenSSL設定ファイルを読み込みます。 デフォルトでは、ファイル名はopenssl.cnfで、openssl version -dで報告されるディレクトリに格納されています。 このデフォルトはOPENSSL_CONF環境変数に希望する設定ファイル名を設定することで変更することができます。
サーバ証明書が信頼できるか検証するために、信頼する認証局(CA)の証明書をユーザのホームディレクトリ内の~/.postgresql/root.crtファイルに格納してください。 (Microsoft Windowsの場合、このファイルの名前は%APPDATA%\postgresql\root.crtです。) するとlibpqはサーバの証明書が信頼する認証局のいずれかで署名されているかどうか検証します。 サーバが信頼できる証明書を持たない場合、SSL接続は失敗します。 ~/.postgresql/root.crlファイル(Microsoft Windowsでは%APPDATA%\postgresql\root.crl)が存在する場合証明書失効リスト(CRL)の項目もまた検査されます。
サーバが信頼できるクライアント証明を要求する場合、libpqはユーザのホームディレクトリにある~/.postgresql/postgresql.crtファイルに格納された証明書を送信します。 証明書はサーバで信頼された認証局(CA)のいずれかで署名されなければなりません。 また、PGSSLKEYで指定されるように、証明書の秘密キーがハードウェアトークンに格納されていない限り、一致する~/.postgresql/postgresql.key秘密キーファイルも存在しなければなりません。 (Microsoft Windowsでは、このファイルの名前はそれぞれ%APPDATA%\postgresql\postgresql.crtと%APPDATA%\postgresql\postgresql.keyです。) プライベートキーファイルには誰にでも読み取りできるような権限を付与してはなりません。
環境変数PGSSLKEYが設定されている場合、コロンで区切ったエンジン名とキー識別子から構成されなければなりません。 この場合、libpqは指定されたエンジン、つまり特別なハードウェアをサポートするOpenSSLモジュールをロードし、指定された識別子でキーを参照します。 識別子はエンジン固有のものです。 通常は、暗号化ハードウェアトークンはアプリケーションに対して秘密キーを示しません。 その代わりに、アプリケーションは、秘密キーをハードウェアトークンに対して要求するすべての暗号化処理を委譲します。
もしアプリケーションでSSL(更にlibpq)を使用していたら、SSLライブラリをアプリケーションで初期化したことを libpq に知らせるのにPQinitSSL(int)
を使用できるでしょう。
SSL APIの詳細についてはhttp://h71000.www7.hp.com/doc/83final/BA554_90007/ch04.htmlを参照してください。
表 30-1. libpq/クライアントにおけるSSLファイルの使用方法
ファイル | 内容 | 効果 |
---|---|---|
~/.postgresql/postgresql.crt | クライアント証明書 | サーバにより要求されます |
~/.postgresql/postgresql.key | クライアントの秘密キー | 所有者により送信されるクライアント証明書を証明します。証明書の所有者が信頼できることを意味していません。 |
~/.postgresql/root.crt | 信頼できる認証局 | サーバ証明書が信頼できる認証局により署名されたか検査します。 |
~/.postgresql/root.crl | 認証局により失効された証明書 | サーバ証明書はこのリストにあってはいけません |