Postgres接続用のSSLを有効にする方法


暗号化されたネットワーク接続を使用することは、現代の環境で本当に選択でありません.しかし、追加の暗号化フェーズを使用して、暗号化ハンドシェイクを使用して、ネットワーク接続に遅延とオーバーヘッドを追加します.
SSLを有効にすることをあなたに案内する他のブログ記事があるので、このWriteupは私自身のためのより多くのスクラッチパッドです.しかし、これらは私がしたかったことではありませんでした.
このブログ記事は、概念の証明などのPostgresのための可能な限りのSSLのセットアップとして簡単かつ簡単に説明します.このブログ記事は、正式に署名された証明書を使用してSSL設定を記述しません.

最初のステップ:証明書


SSLのために、暗号鍵(証明書である)と復号鍵(それは鍵です)がなければなりません.SSL証明書が働く方法は、証明書を作成することは別の暗号化と復号化の組み合わせを含んでいなければなりません.このように、証明書は信頼できるように選択した署名機関によって署名された場合には正当であると判断することができます.したがって、大部分のオペレーティングシステムSSLのインストールには、信頼された認証局証明書のプリセットバンドルが付属しています.
迅速かつ簡単なセットアップのために、我々はまだ権威によって証明書の署名を行う必要があります.唯一の権限証明書を生成します.あなた自身の証明書に署名するこのセットアップは、非常に論理的に「自己署名証明書」と命名されます.これは、私たちの個人の権威別名について知らないどんなクライアントも、その証明書が権威としてセットされているという欠点を持っています.
しかし、テスト環境をコントロールしている場合、これは問題ではありません.なぜなら、クライアントを自分の認証局(証明書を通して)に向けることができるからです.
これらは、認証局( CA )キーと証明書を生成し、サーバキーとCSR (証明書署名要求)を生成し、要求に署名し、証明書を作成するコマンドです.
--CA
openssl genrsa 2048 > ca.key
openssl req -new -x509 -nodes -days 365000 -key ca.key -out ca.cert
--server
openssl req -newkey rsa:2048 -nodes -days 365000 -keyout server.key -out server.csr
openssl x509 -req -days 365000 -set_serial 01 -in server.csr -out server.cert -CA ca.cert -CAkey ca.key
詳細を入力してください.CN alias共通名はホスト名に設定する必要があります.
この結果、次のファイルが表示されます.
  • 認証局キー.一般的な使用法は必要ありません.
  • 認証局証明書.必要です.
  • サーバ.key -> keyファイル.必要です.
  • サーバ.署名要求.一般的な使用法は必要ありません.
  • サーバ.証明書ファイル.必要です.
  • 第2ステップ: PostgreSQLの設定


    暗号化のためにこれらのファイルを使用するには、SSL関連のファイルをpostmasterに利用しなければなりません.
    ssl = on
    ssl_ca_file = '/var/lib/pgsql/11/data/ssl/ca.cert'
    ssl_cert_file = '/var/lib/pgsql/11/data/ssl/server.cert'
    ssl_key_file = '/var/lib/pgsql/11/data/ssl/server.key'
    
    これは必要なものではない.The pg_hba.conf SSLを許可しなければなりません.これは最初の引数で接続されています.接続タイプはSSLを許可しなければなりません.共通のタイプ' host 'は両方のSSLと非SSLを許します.' hostssl '型はSSLを強制し、タイプ' hostnossl 'はSSLを明示的に禁止します.
    タイプ'ホスト'両方で、SSLと非SSLは同じポートからサーブできます.

    オプションの第3ステップ


    PGbouncerを使うならば、あなたはPGbouncerのためにSSLを有効にすることができます.PGbouncerは、クライアントにサービスを提供するために同じファイル(認証局とサーバ証明書、およびサーバキーファイル)を必要とします.
    client_tls_sslmode = allow
    client_tls_ca_file = /tmp/ca.cert
    client_tls_key_file = /tmp/server.key
    client_tls_cert_file = /tmp/server.cert
    
    PGBouncerがSSLを提供するとき、それはデータベース(またはソケット接続)に非SSL接続を使用することができて、したがって、SGLターミネータとしてPGbouncer作業をします.
    PGbouncerがデータベースにSSLを話す必要がある場合、それは追加の設定を必要とします.