証明書の管理

PEMサーバーバッキングデータベースのデータディレクトリに保存されているファイルには、PEMサーバーが安全な接続を利用するのに役立つ情報が含まれています。

  • ca_certificate.crt

  • ca_key.key

  • server.crt

  • server.key

  • root.crl

  • root.crt

PEMサーバーと共にインストールされるPEMエージェントは、 ca_certificate.crt ファイルの有効期限を監視します。証明書の有効期限が切れそうになると、PEMは次のことを行います。

  • 既存の証明書ファイルのバックアップを作成します。

  • 新しい証明書ファイルを作成し、新しいCA証明書ファイルをPEMサーバーのroot.crtファイルに追加します。

  • アクティブなエージェントの証明書ファイルを更新するジョブを作成します。

  • PEMサーバーを再起動します。

エージェントをアンインストールすると、そのエージェントに関連付けられた証明書が証明書失効リスト( root.crl ファイルに保持)に追加され、証明書を使用してPEMサーバーに接続できないようになります。

次のセクションには、証明書ファイルを手動で置き換えることに関する詳細情報が含まれています。

SSL証明書の置き換え

次の手順では、既存のPEMインストールでのSSL証明書の置換について詳しく説明します。サーバーを同時に新しいバージョンにアップグレードする場合は、SSL証明書を置き換える前に、すべてのPEMインストーラー(最初にサーバーインストーラー、次にエージェントインストーラー)を呼び出します。次に:

  1. 最初にサーバーホストで実行中のすべてのPEMエージェントを停止し、次に監視対象ノードで停止します。

    LinuxホストでPEMエージェントを停止するには、ターミナルウィンドウを開き、スーパーユーザー権限を引き受けて、次のコマンドを入力します。

    /etc/init.d/pemagent stop

    Windowsホストでは、 Services アプレットを使用してPEMエージェントを停止できます。 PEMエージェントサービスの名前はPostgres Enterprise Manager Agentです。 Services ダイアログでサービス名を強調表示し、 Stop the service をクリックします。

  2. 既存のSSLキーと証明書のバックアップを取ります。 SSLキーと証明書は、PEMインストールの data ディレクトリに保存されます。たとえば、Linuxシステムのデフォルトの場所は次のとおりです。

    /opt/PostgreSQL/10/data

    次のファイルのコピーを作成し、各ファイルに拡張子を追加して、名前を一意にします。

    • ca_certificate.crt

    • ca_key.key

    • root.crt

    • root.crl

    • server.key

    • server.crt

    たとえば、次のコマンド:

    # cp ca_certificate.crt ca_certificate_old.crt

    エントリに old という単語が追加された ca_certificate ファイルのバックアップを作成します。

  3. openssl_rsa_generate_key() 関数を使用して ca_key.key ファイルを生成します:

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -c /"SELECT public.openssl_rsa_generate_key(1024)/" > /opt/PostgreSQL/10/data/ca_key.key

    ca_key.key ファイルを作成した後、 ca_certificate.crt ファイルを生成し、 ca_key.key ファイルの権限を変更するときに使用する変数 CA_KEY の内容を cat にします:

    CA_KEY=$(cat /opt/PostgreSQL/10/data/ca_key.key)

    chmod 600 /opt/PostgreSQL/10/data/ca_key.key

  4. キーを使用して ca_certificate.crt ファイルを生成します。簡単にするために、SQLクエリを一意の名前で一時ファイルに配置します。

    echo /"SELECT openssl_csr_to_crt(openssl_rsa_key_to_csr('${CA_KEY}', 'PEM','US', 'MA', 'Bedford', 'Postgres Enterprise Manager', 'support@enterprisedb.com'), NULL, '/opt/PostgreSQL/10/data/ca_key.key')/" > /tmp/_random.$$

    次に、変数を使用してクエリを実行し、コンテンツを ca_certificate.crt ファイルに配置します。

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -f /tmp/_random.$$ > /opt/PostgreSQL/10/data/ca_certificate.crt

    ca_certificate.crt ファイルの権限を変更し、SQLコマンドを含む一時ファイルを削除します。

    chmod 600 /opt/PostgreSQL/10/data/ca_certificate.crt

    rm -f /tmp/_random.$$

  5. ca_certificate.crt ファイルを root.crt ファイルとして再利用します:

    cp /opt/PostgreSQL/10/data/ca_certificate.crt /opt/PostgreSQL/10/data/root.crt

    root.crt ファイルのパーミッションを変更します:

    chmod 600 /opt/PostgreSQL/10/data/root.crt

  6. openssl_rsa_generate_crl() 関数を使用して、証明書失効リスト( root.crl )を作成します。

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -c /"SELECT openssl_rsa_generate_crl('/opt/PostgreSQL/9.5/data/ca_certificate.crt', '/opt/PostgreSQL/10/data/ca_key.key')/" > /opt/PostgreSQL/10/data/root.crl

    root.crl ファイルのパーミッションを変更します:

    chmod 600 /opt/PostgreSQL/10/data/root.crl

  7. openssl_rsa_generate_key() 関数を使用して server.key ファイルを生成します:

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -c /"SELECT public.openssl_rsa_generate_key(1024)/" >> /opt/PostgreSQL/10/data/server.key

    server.key ファイルを作成した後、 server.crt ファイルを生成し、 server.key ファイルの権限を変更するときに使用する変数 SSL_KEY の内容を cat にします:

    SSL_KEY=$(cat /opt/PostgreSQL/10/data/server.key)

    chmod 600 /opt/PostgreSQL/10/data/server.key

  8. SSL_KEY を使用してサーバー証明書を生成します。証明書を server.crt ファイルに保存します。簡単にするために、最初にSQLクエリを一意の名前を持つ一時ファイルに配置します。

    echo /"SELECT openssl_csr_to_crt(openssl_rsa_key_to_csr('${SSL_KEY}', 'PEM','US', 'MA', 'Bedford', 'Postgres Enterprise Manager', 'support@enterprisedb.com'), '/opt/PostgreSQL/10/data/ca_certificate.crt', '/opt/PostgreSQL/10/data/ca_key.key')/" > /tmp/_random.$$

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -f /tmp/_random.$$ >> /opt/PostgreSQL/10/data/server.crt

  9. server.crt ファイルの特権を変更し、一時ファイルを削除します。

    chmod 600 /opt/PostgreSQL/10/data/server.crt

    rm -f /tmp/_random.$$

  10. Postgresサーバーを再起動します。

/etc/init.d/postgresql-10 restart

エージェントSSL証明書の更新

PEMサーバーと対話するエージェントごとに、以下を行う必要があります。

  • rsaキーと証明書を生成します。

  • キーと証明書をエージェントにコピーします。

  • エージェントを再起動します。

各エージェントには、 pem データベースの pem.agent テーブルに保存される一意の識別子があります。キーと証明書のファイルを、エージェントの識別子に対応するキーまたは証明書に置き換える必要があります。次のキーファイルペアを生成する前に、 agent.key および agent.crt ファイル(ステップ2および3で生成されたファイルをそれぞれのPEMエージェントホストの所定の場所に移動する必要があることに注意してください。後続のコマンドは以前に生成されたファイルを上書きします。

PEMエージェントキーファイルペアを生成するには:

  1. psqlを使用して、エージェントの数とそれに対応する識別子を見つけます。

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -c /"SELECT ID FROM pem.agent/"

  • Linuxでは、 /etc/postgres-reg.ini ファイルの PEMagent セクションで、エージェント識別子とキーと証明書の場所を見つけることもできます。

  • Windowsでは、情報はレジストリに保存されます。

    • 64ビットWindowsインストールでは、次を確認します。

      HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/EnterpriseDB/PEM/agent

    • 32ビットWindowsインストールでは、次を確認します。

    HKEY_LOCAL_MACHINE/SOFTWARE/EnterpriseDB/PEM/agent

  1. キーファイルを必要とするエージェントを特定した後、各エージェントに対して agent.key を生成します。キーを生成するには、次のコマンドを実行して、出力をファイルにキャプチャします。

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -c /"SELECT openssl_rsa_generate_key(1024)/" > agent.key

agent.key ファイルの特権を変更します:

chmod 600 agent.key

  1. 各エージェントの証明書を生成します。証明書を生成するには、次のコマンドを実行して、出力を証明書ファイルにキャプチャします。

    /opt/PostgreSQL/10/bin/psql -U postgres -d pem --no-psqlrc -t -A -c /"SELECT openssl_csr_to_crt(openssl_rsa_key_to_csr('$(cat agent.key)', 'agent<$ID>', 'US', 'MA', 'Bedford', 'Postgres Enterprise Manager', 'support@enterprisedb.com'), '/opt/PostgreSQL/10/data/ca_certificate.crt', '/opt/PostgreSQL/10/data/ca_key.key')/" > agent.crt

ここで、* $ ID *はエージェントのエージェント番号です(psqlコマンドラインから取得)。

  1. agent.crt ファイルの特権を変更します:

    chmod 600 agent.crt

  2. PEMエージェントサービスを再起動する前に、各エージェントのキーと証明書ファイルを新しく生成されたファイルで置き換えます。

  • Linuxでは、次のコマンドを使用してサービスを再起動します。

    /etc/init.d/pemagent start

  • Windowsホストでは、サービスアプレットを使用してPEMエージェントを起動できます。 PEMエージェントサービスの名前は Postgres Enterprise Manager エージェントです。 Postgres Enterprise Manager ダイアログでサービス名を強調表示し、 Start the service をクリックします。