他のプロトコルと同様に、PostgreSQLにSSL / TLSを使用すると、クライアントとサーバー間の接続を保護できます。必要かどうかは、ネットワーク環境によって異なります。
pg_hba.conf
SSL / TLSがない場合、クライアントとサーバー間のトラフィックは盗聴者によって表示されます。すべてのクエリと応答、および構成方法(クライアントが使用しているmd5
かプレーンテキストのパスワード)に応じてパスワードが表示される場合があります。
私の知る限り、MD5またはプレーンテキストのパスワード認証を要求するのはサーバーであるため、SSL / TLSを使用していない場合、アクティブな中間者攻撃者は確実にそれをダウングレードしてパスワードを取得する可能性があります。
適切に構成されたSSL/TLS接続により、パスワードとデータの両方に対して、盗聴やMITM攻撃を防ぐことができます。
を使用してサーバー側でSSLを使用するように要求できますがsslhost
、pg_hba.conf
これは問題の一部にすぎません。最終的には、Webサーバーの場合と同様に、SSLが使用されていること、およびSSLが適切なサーバーで使用されていることを確認するのはクライアントの責任です。
libpqドキュメントの表31-1は、取得する保護のレベルをまとめたものです。
基本的に:
- SSLを使用する理由があり
disable
、役に立たないと思われる場合(セキュリティが必要な場合は、「いいえ」または「たぶん」を使用しないでください)。allow
prefer
require
リモートサーバーのIDをまったく検証しないため、ほとんど役に立ちません。
verify-ca
ホスト名を検証しないため、MITM攻撃に対して脆弱になります。
セキュリティが重要な場合に必要なのはですverify-full
。
これらのSSLモード名はlibpqによって設定されます。他のクライアントは同じものを使用しない場合があります(たとえば、純粋なRuby実装またはJDBC)。
私が見る限り、ruby-pgはlibpqに依存しています。残念ながら、そのリストには「disable | allow | priority|require」しか表示さsslmode
れません。verify-full
直接渡された場合もおそらく機能する可能性があります。ただし、CA証明書を構成する方法も必要になります。