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

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 16章サーバ実行時環境 | 早送り | 次のページ

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

PostgreSQLは本来的にSSL接続をサポートし、クライアント/サーバの通信が更に安全になるよう暗号化します。 そのためにはOpenSSLがクライアントとサーバシステムの両方にインストールされ、構築時にPostgreSQLにおけるそのサポートが有効になっている必要があります(第14章 を参照してください)。

SSLサポートを有効にしてコンパイルされた場合、PostgreSQLサーバは、`postgresql.conf`においてsslパラメータを`on`にすることで、SSLサポートを有効にして起動することができます。 SSLモードで起動する時は、サーバは`server.key`ファイルと`server.crt`ファイルをデータディレクトリの中から探します。 これらのファイルはそれぞれサーバのプライベートキーと証明書を含んだものでなければなりません。 SSLが動作可能なサーバを起動するためには、これらのファイルを正しく設定しなければなりません。 もしプライベートキーがパスフレーズで保護されている場合は、サーバはパスフレーズの入力を促し、入力されるまでは起動しません。

サーバは標準接続とSSL接続の両方を同じTCP/IPポート上で監視し、接続してきたクライアントとSSLを使用するかどうかを交渉します。 デフォルトでは、これはクライアントのオプションです。 特定の接続に対し、サーバにSSLを必ず使用させるための設定方法については項19.1を参照してください。

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

    openssl req -new -text -out server.req

`openssl`から出される質問に答えてください。 この時、"Common Name"には確実にローカルホスト名を入力してください。 チャレンジパスワードは空白でも構いません。 このプログラムはパスフレーズで保護されたキーを生成しますが、4文字以下のパスフレーズは認められません。 パスフレーズを削除するためには（サーバの自動起動を行いたいのであれば）、下記のコマンドを実行してください。

    openssl rsa -in privkey.pem -out server.key
    rm privkey.pem

既存のキーのロックを外すために、古いパスフレーズを入力します。 そして、下記を実行してください。

    openssl req -x509 -in server.req -text -key server.key -out server.crt
    chmod og-rwx server.key

このように、証明書を自己署名の証明書にして、キーと証明書とをサーバが検索する場所にコピーします。

クライアント証明の検証が必要であれば、検査対象のCA(複数可)の証明書をデータディレクトリ内の`root.crt`ファイルに格納してください。 証明書が存在すれば、接続開始時にクライアントからクライアント証明が要求されます。 また、その証明書は`root.crt`内の証明書の1つで署名されている必要があります。

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

`server.key`、`server.crt`、および、`root.crt`はサーバ起動時にのみ確認されます。 従って、これらのファイルの変更を有効にするためにはサーバを再起動する必要があります。

前のページ | ホーム | 次のページ
サーバのシャットダウン | 上に戻る | SSHトンネルを使った安全なTCP/IP接続