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

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 第 17章サーバ設定と操作 | 早送り | 次のページ

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

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

SSLサポートを有効にしてコンパイルされた場合、PostgreSQLサーバは、`postgresql.conf`においてsslパラメータを`on`にすることで、SSLサポートを有効にして起動することができます。 サーバは同じTCPポートで標準的な接続とSSL接続の両方を待ち受け、クライアントとの接続にSSLを使用するかどうかを調停します。 デフォルトでは、これはクライアントの選択肢です。 一部またはすべての接続でSSLの使用を必要とさせるためのサーバ側の設定方法に関しては項19.1を参照してください。

PostgreSQLは、システム全体用のOpenSSL設定ファイルを読み取ります。 デフォルトでは、このファイルの名前は`openssl.cnf`であり、`openssl version -d`で報告されるディレクトリに存在します。 このデフォルトは環境変数`OPENSSL_CONF`を希望する設定ファイルの名前に設定することにより変更可能です。

OpenSSLは、強度が異なる、多くの暗号化および認証用のアルゴリズムをサポートします。 暗号の一覧はOpenSSL設定ファイル内で指定することができますが、`postgresql.conf`内のssl_ciphersを変更することで、データベースサーバで使用される暗号を指定することができます。

> 注意: `NULL-SHA`または`NULL-MD5`暗号を使用して暗号化のオーバーヘッドなしで認証を行うｋとが可能です。 しかし、中間者はクライアントサーバ間の通信を読み取り中継することができます。 また、暗号化のオーバーヘッドは認証のオーバーヘッドと比べると最小です。 こうした理由によりNULL暗号は推奨しません。

SSLモードを始めるには、`server.crt`および`server.key`ファイルがサーバのデータディレクトリに存在しなければなりません。 これらのファイルには、サーバ証明と秘密キーがそれぞれ含まれます。 Unixシステムでは、`server.key`の権限は所有者以外からのアクセスを許可してはなりません。 これは`chmod 0600 server.key`というコマンドで実現できます。 秘密キーがパスフレーズで保護されている場合、サーバはパスフレーズの入力を促し、入力されるまでは起動しません。

## 17.8.1. クライアント証明書の使用

クライアントに信頼できる証明書を要求するためには、信頼する認証局（CA）の証明書をデータディレクトリ内の`root.crt`ファイルに記述し、pg_hba.confの適切な行（複数もあり）に`clientcert`パラメータを`1`に設定します。 その後、SSL接続起動時にクライアントからの証明書が要求されます。 （クライアントにある証明書の設定方法については項30.17を参照してください。） サーバは、クライアントの証明書が信頼する認証局のいずれかにより署名されていることを検証します。 `root.crl`ファイルが存在する場合、証明失効リスト（CRL）項目も検査されます。 （SSL証明書の使用方法の示す図についてはhttp://h71000.www7.hp.com/DOC/83final/BA554_90007/ch04s02.htmlを参照してください。）

`pg_hba.conf`の中の`clientcert`オプションは全ての認証方式に対して有効ですが、`hostssl`として指定された行のみに対してです。指定されない場合、デフォルトではクライアント証明書を検証しません。

ユーザの認証にクライアント証明書を使用するために`cert`認証方式を使用することができます。 詳細については項19.3.8を参照してください。

## 17.8.2. サーバにおけるSSL関連ファイルの利用

`server.key`、`server.crt`、`root.crt`、`root.crl`ファイルは、サーバ起動時にのみ検査されます。 ですので、これらのファイルの変更を有効にするためにはサーバを再起動する必要があります。

表 17-3. SSLサーバファイルの使用方法

ファイル | 内容 | 影響
--- | --- | ---
`server.crt` | サーバ証明書 | クライアントが要求します
`server.key` | sサーバの秘密キー | 所有者が送信したサーバ証明を検証します。証明書所有者が信頼できることを意味しません。
`root.crt` | 信頼できる認証局 | 信頼する認証局により署名された証明書か検査します。
`root.crl` | 認証局により失効された証明書 | クライアント証明はこの一覧にある必要はありません。

## 17.8.3. 自己署名証明書の作成

To create a quick self-signed certificate for the server, use the following OpenSSL command: --> サーバ用の自己署名証明書を簡単に作るためには下記の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

サーバの秘密キーおよび証明書を作成するための詳しい方法についてはOpenSSLの文書を参照してください。

自己署名証明書を試験のために使用することはできますが、クライアントがサーバの身元を検証できますので、運用時は（グローバルなCAの1つまたはローカルな認証局のいずれかの）認証局（CA）により署名された証明書を使用すべきです。もし全てのクライアントが組織においてローカルであれば、ローカルCAの使用が推奨されます。

前のページ | ホーム | 次のページ
暗号化オプション | 上に戻る | SSHトンネルを使った安全なTCP/IP接続