Managing Certificates

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エージェントを停止するには、ターミナルウィンドウを開き、スーパーユーザー権限を引き受けて、次のコマンドを入力します。

    Linuxでinit.dを使用する場合(例:Centos6)

    /etc/init.d/pemagent stop
    

    Linuxでsystemdを使用している場合(例:Centos7)

    systemctl stop pemagent
    

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

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

    /var/lib/pgsql/x/data 。 x はPostgreSQLデータベースのバージョンです。

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

    • 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 ファイルを生成します。

    /usr/pgsql-x.x/bin/psql -U postgres -d pem --no-psqlrc -t -A -c "SELECT public.openssl_rsa_generate_key(1024)" > /var/lib/pgsql/x/data/ca_key.key
    

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

    CA_KEY=$(cat /var/lib/pgsql/x/data/ca_key.key)
    
    chmod 600 /var/lib/pgsql/x/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,
    '/var/lib/pgsql/x/data/ca_key.key')" > /tmp/_random.$$
    

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

    /usr/pgsql-x/bin/psql -U postgres -d pem --no-psqlrc -t -A -f /tmp/_random.$$ > /var/lib/pgsql/x/data/ca_certificate.crt
    

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

    chmod 600 /var/lib/pgsql/x/data/ca_certificate.crt
    
    rm -f /tmp/_random.$$
    
  5. ca_certificate.crt ファイルを root.crt ファイルとして再利用します。

    cp /var/lib/pgsql/x/data/ca_certificate.crt /var/lib/pgsql/x/data/root.crt
    

    root.crt ファイルのアクセス許可を変更します。

    chmod 600 /var/lib/pgsql/x/data/root.crt
    
  6. openssl_rsa_generate_crl() 関数を使用して、証明書失効リスト( root.crl )を作成します。

    /usr/pgsql-x/bin/psql -U postgres -d pem --no-psqlrc -t -A -c
     "SELECT openssl_rsa_generate_crl('/var/lib/pgsql/x/data/ca_certificate.crt', '/var/lib/pgsql/x/data/ca_key.key')" > /var/lib/pgsql/x/data/root.crl
    

    root.crl ファイルのアクセス許可を変更します。

    chmod 600 /var/lib/pgsql/x/data/root.crl
    
  7. openssl_rsa_generate_key() 関数を使用して server.key ファイルを生成します。

    /usr/pgsql-x/bin/psql -U postgres -d pem --no-psqlrc -t -A -c "SELECT public.openssl_rsa_generate_key(1024)" >> /var/lib/pgsql/x/data/server.key
    

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

    SSL_KEY=$(cat /var/lib/pgsql/x/data/server.key)
    
    chmod 600 /var/lib/pgsql/x/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'),
    '/var/lib/pgsql/x/data/ca_certificate.crt',
    '/var/lib/pgsql/x/data/ca_key.key')" > /tmp/_random.$$
    
     /usr/pgsql-x/bin/psql -U postgres -d pem --no-psqlrc -t -A -f /tmp/_random.$$ >> /var/lib/pgsql/x/data/server.crt
    
  9. server.crt ファイルの特権を変更し、一時ファイルを削除します。

    chmod 600 /var/lib/pgsql/x/data/server.crt
    
    rm -f /tmp/_random.$$
    
  10. Postgresサーバーを再起動します。

    init.d のLinuxの場合;たとえば、Centos6ホストの場合:

/etc/init.d/postgresql-x restart

systemd のLinuxの場合;たとえば、Centos7ホストの場合:

systemctl restart postgresql-x

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

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

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

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

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

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

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

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

    /usr/pgsql-x/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
    
    * On a 32-bit Windows installation, check:
    
    HKEY_LOCAL_MACHINE\SOFTWARE\EnterpriseDB\PEM\agent
    
  1. キーファイルを必要とするエージェントを特定した後、エージェントごとに agent.key を生成します。キーを生成するには、次のコマンドを実行して、出力をファイルにキャプチャします。

    /usr/pgsql-x/bin/psql -U postgres -d pem --no-psqlrc -t -A -c "SELECT openssl_rsa_generate_key(1024)" > agent.key
    
    Modify the privileges of the ``agent.key`` file:
    
    chmod 600 agent.key
    
  2. 各エージェントの証明書を生成します。証明書を生成するには、次のコマンドを実行して、証明書ファイルに出力をキャプチャします。

    /usr/pgsql-x/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'),
    '/var/lib/pgsql/x/data/ca_certificate.crt',
    '/var/lib/pgsql/x/data/ca_key.key')" > agent.crt
    

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

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

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

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

    /etc/init.d/pemagent start
    

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

    systemctl start pemagent
    

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