3.7. SSLによる安全なTCP/IP接続

PostgreSQLは本来的にSSL越しの接続をサポートし、 クライアント/サーバの通信が更に安全になるよう暗号化します。 そのためにはOpenSSLがクライアントと サーバシステムの両方にインストールされビルド時に動作可能になっている必要があります。 (Chapter 1を参照してください。)

SSLサポートでコンパイルされると、PostgreSQLサーバは SSL接続を動作可能にするために引数-l (アルファベットのエル) と一緒に起動することができるようになります。SSL モードで起動する 時は、postmaster はファイルserver.keyserver.crtをデータディレクトリの中から探します。 これらのファイルは SSL が動作可能なサーバが起動する前に正しく 設定されなけばいけません。もしプライベートキーがパスフレーズで 保護されている場合は、postmaster はパスフレーズの入力を促し、 入力されるまでは起動しません。

postmasterは標準接続とSSL接続接続の両方を同じTCP/IPポート上で待ち受け (listen)し、接続してきたクライアントとSSLを使用するかどうかを交渉します。 特定の接続に対し、サーバ側でSSLの使用を強要する方法については Chapter 4を参照して下さい。

サーバのプライベートキーと証明書を作成する方法の詳細は OpenSSLのドキュメントを参照して下さい。 テストで使い始めるにあたり簡単な自筆署名の証明書を使うことができますが、 製品として使うには CA (世界共通の認証局もしくは地元認証局)の署名付き 証明書を使うべきで、そうするとクライアントはサーバ身元を確認できます。 自筆署名の証明書を作るためには下記の OpenSSL コマンドを使って下さい。

openssl req -new -text -out cert.req
openssl から出される質問に答えて下さい。このとき、Common Name には ローカルホスト名を入力して、チャレンジパスワードは空白でも構いません。 スクリプトがパスフレーズで保護されたキーを生成しますが、4 文字以下 のパスフレーズは認められません。パスフレーズを削除するためには (postmaster の自動起動を行いたいのであれば)、下記のコマンドを実行して下さい。
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
このように、証明書を自筆署名の証明書にして、キーと証明書とを postmaster が見つけられる場所にコピーします。