5

おはようございます、

私はPostgresql構成ファイルを調べていましたが、最近、sslオプションがあることに気づきました。これがいつ必要になるのかと思っていました。

アプリサーバーとデータベースサーバーがあり、プライベートネットワーク内で実行されていない場合を考えてみましょう。ユーザーがログインしようとした場合、SSLが有効になっていないと、アプリサーバーはユーザーのパスワードが有効なユーザー名/パスワードであるかどうかを検索するときに、クリアテキストでデータベースに送信しますか?

ここでの標準的な慣行は何ですか?SSLを使用するようにDBを設定する必要がありますか?

その場合、config/database.ymlRailsアプリの接続設定に違いはありますか?

ありがとう!

4

2 に答える 2

7

他のプロトコルと同様に、PostgreSQLにSSL / TLSを使用すると、クライアントとサーバー間の接続を保護できます。必要かどうかは、ネットワーク環境によって異なります。

pg_hba.confSSL / TLSがない場合、クライアントとサーバー間のトラフィックは盗聴者によって表示されます。すべてのクエリと応答、および構成方法(クライアントが使用しているmd5かプレーンテキストのパスワード)に応じてパスワードが表示される場合があります。

私の知る限り、MD5またはプレーンテキストのパスワード認証を要求するのはサーバーであるため、SSL / TLSを使用していない場合、アクティブな中間者攻撃者は確実にそれをダウングレードしてパスワードを取得する可能性があります。

適切に構成されたSSL/TLS接続により、パスワードとデータの両方に対して、盗聴やMITM攻撃を防ぐことができます。

を使用してサーバー側でSSLを使用するように要求できますがsslhostpg_hba.confこれは問題の一部にすぎません。最終的には、Webサーバーの場合と同様に、SSLが使用されていること、およびSSLが適切なサーバーで使用されていることを確認するのはクライアントの責任です。

libpqドキュメントの表31-1は、取得する保護のレベルをまとめたものです。

基本的に:

  • SSLを使用する理由がありdisable、役に立たないと思われる場合(セキュリティが必要な場合は、「いいえ」または「たぶん」を使用しないでください)。allowprefer
  • requireリモートサーバーのIDをまったく検証しないため、ほとんど役に立ちません。
  • verify-caホスト名を検証しないため、MITM攻撃に対して脆弱になります。

セキュリティが重要な場合に必要なのはですverify-full

これらのSSLモード名はlibpqによって設定されます。他のクライアントは同じものを使用しない場合があります(たとえば、純粋なRuby実装またはJDBC)。

私が見る限り、ruby-pgはlibpqに依存しています。残念ながら、そのリストには「disable | allow | priority|require」しか表示さsslmodeれません。verify-full直接渡された場合もおそらく機能する可能性があります。ただし、CA証明書を構成する方法も必要になります。

于 2013-03-12T14:55:19.967 に答える
1

パスワード以外のデータを考慮します。あなたが使用するかどうかにかかわらず、私はほとんどセキュリティ態勢の問題です。システムをどの程度安全にする必要がありますか?接続がプライベートネットワーク上にある場合は、そのネットワーク上の誰でもリストインできます。SSLを使用しないことが許容できる場合は、有効にしません。接続がインターネットSSLを超えている場合は、有効にする必要があります。

@Woobleが言うように。そもそも問題がある場合は、パスワードをクリアテキストとして送信しないでください。この場合の標準的な解決策は、データベースにハッシュを格納し、検証のためにハッシュのみを送信することです。

こちらがレール部分のリンクです

于 2013-03-12T13:50:46.313 に答える