PostgreSQLは本来的にSSL越しの接続をサポートし、クライアント/サーバの通信がさらに安全になるよう暗号化します。そのためにはOpenSSLがクライアントとサーバシステムの両方にインストールされビルド時に動作可能になっている必要があります(Chapter 1を参照してください)。
SSLサポートでコンパイルされると、PostgreSQLサーバはSSL接続を動作可能にするために引数-l(アルファベットのエル)を付けて起動することができるようになります。SSLモードで起動するときは、サーバはファイルserver.keyとserver.crtをデータディレクトリの中から探します。これらのファイルはそれぞれサーバのプライベートキーと証明書を含んだものです。これらのファイルはSSLが動作可能なサーバが起動する前に正しく設定されなけばいけません。もしプライベートキーがパスフレーズで保護されている場合は、サーバはパスフレーズの入力を促し、入力されるまでは起動しません。
サーバは標準接続とSSL接続接続の両方を同じTCP/IPポート上で待ち受け(listen)し、接続してきたクライアントとSSLを使用するかどうかを交渉します。特定の接続に対し、サーバ側でSSLの使用を強要する方法についてはChapter 4を参照してください。
サーバのプライベートキーと証明書を作成する方法の詳細は OpenSSLのドキュメントを参照してください。テストで使い始めるにあたり簡単な自筆署名の証明書を使うことができますが、製品として使うにはCA(世界共通のCAもしくは地元認証局)の署名付き証明書を使うべきで、そうすることによりクライアントはサーバ身元を確認できます。自筆署名の証明書を作るためには下記の OpenSSLコマンドを使ってください。
openssl req -new -text -out cert.req
opensslから出される質問に答えてください。このとき、Common Nameにはローカルホスト名を入力して、チャレンジパスワードは空白でも構いません。スクリプトがパスフレーズで保護されたキーを生成しますが、4文字以下のパスフレーズは認められません。パスフレーズを削除するためには(サーバの自動起動を行いたいのであれば)、下記のコマンドを実行してください。
openssl rsa -in privkey.pem -out cert.pem
既存のキーのロックを外すために、古いパスフレーズを入力します。そして、下記を実行してください。
openssl req -x509 -in cert.req -text -key cert.pem -out cert.cert cp cert.pem $PGDATA/server.key cp cert.cert $PGDATA/server.crt
このように、証明書を自筆署名の証明書にして、キーと証明書とをサーバが見つけられる場所にコピーします。