Managing SSL certificates#

PEMは自己署名SSL証明書を使用します。

Webサーバー証明書#

PEMは、Apache httpdサーバーの自己署名SSL証明書を使用します。 Apache httpdサーバーの自己署名SSL証明書とキーファイルは、PEMのインストール中に生成されます。

PEMに独自のSSL証明書を使用するには、Apache HTTP構成ファイル edb-ssl-pem.conf を更新します。

PEM VirtualHostセクションで、これらの2つのSSL指示子を更新します。

  • SSLCertificateFile は、証明書ファイル、例、your_domain_name.crt です。

  • SSLCertificateKeyFile は、証明書署名要求CSR、your_private.key などを作成したときに生成された.key ファイルです。

例、次の更新を行います。

#  Change the server name and file names in the configuration file to

#  match your certificate files.

SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
セキュリティを強化するために、PEMでhttpd自己署名SSL証明書を信頼できるCA署名証明書に置き換えることができます。詳細については、

Replacing httpd self-signed SSL certificates を参照してください。

PEMバックエンドデータベースサーバーとエージェントの接続証明書#

デフォルトでは、PEMはPEMエージェントとバックエンドデータベース間で安全なSSL/TLS接続を実装します。また、独自の認証局CAとして機能して、PEMサーバーとエージェントの証明書とキーを生成します。 PEMサーバーとエージェントの自己署名SSL証明書とキーは、PEMのインストール中に生成されます。これらの証明書とキーは、エージェントからサーバーへの接続を暗号化します。さらに、PEMエージェントは、パスワードではなく証明書を使用して認証されます。

PEM自己署名SSL証明書とキーを、信頼できるCA証明書とキーに置き換えることができます。詳細については、 信頼できるCAによって署名された証明書とキーを使用する を参照してください。

PEM自己署名SSL証明書の仕組み#

PEMサーバー構成スクリプトは、PEMバックエンドデータベースサーバーの自己署名SSL証明書とキーファイルを生成します。バックエンドデータベースサーバーは、これらの証明書とキーを使用して、エージェント接続を認証および暗号化します。各証明書には有効期限があります。証明書の有効期限が近づくと、証明書を再生成します。詳細については、 Regenerating the server self-signed SSL certificates を参照してください。

PEMエージェントは、libpqインターフェイスを使用してPEMバックエンドデータベースサーバーに接続し、バックエンドデータベースサーバーのクライアントとして機能します。エージェントの自己署名SSL証明書とキーは、 Registering a PEM agent 中に生成されます。 PEMエージェントは、自己署名SSL証明書とキーファイルを使用して、PEMバックエンドデータベースサーバーとの接続を確立します。

各エージェントには一意の識別子があり、エージェントの証明書とキーには対応する識別子があります。各証明書には有効期限があります。証明書の有効期限が近づくと、証明書を再生成します。詳細については、 Regenerating the agent self-signed SSL certificates を参照してください。

必要に応じて、エージェントごとに1つの証明書を使用するのではなく、すべてのエージェントに同じ証明書を使用できます。詳細については、 共通エージェント証明書とキーペアを生成する を参照してください。

SSL証明書を使用してPostgresで接続する方法の詳細については、

Securing TCP/IP connections with SSL を参照してください。

証明書とキーファイルの生成#

PEMサーバーは、バックエンドデータベースサーバーのデータディレクトリに証明書とキーファイルを生成します。

  • ca_certificate.crt

  • ca_key.key

  • root.crt

  • root.crl

  • server.crt

  • server.key

ca_certificate.crt およびca_key.key ファイルは、エージェント登録プロセス中に使用され、エージェントのSSL証明書とキーファイルを生成します。

root.crt ファイルは、ca_certificate.crt ファイルのコピーです。 postgresql.conf ファイルでssl_ca_file パラメーターをroot.crt として設定することにより、バックエンドデータベースサーバーのルート証明書を使用します。

root.crl には、実際のまたは割り当てられた有効期限の前に発行CAによって失効されたデジタル証明書の証明書失効リストCRLがあります。

server.crt ファイルはPEMサーバーの署名された証明書であり、 server.key ファイルは証明書のプライベートキーです。 PEMエージェント証明書は、これらのサーバー証明書とキーファイルを使用して生成されます。

PEM自己署名SSL証明書の更新#

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

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

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

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

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

共通エージェント証明書とキーペアを生成する#

エージェントごとに1ユーザーデフォルトではなく、すべてのPEMエージェントに単一のPostgresユーザーを作成して使用することにより、すべてのエージェントに同じ証明書を使用できます。

ユーザーを作成し、エージェント証明書とキーペアを生成し、すべてのPEMエージェントにそれらを使用します。

  1. PEMバックエンドデータベースに1つの共通エージェントユーザーを作成します。 pem_agent ロールをユーザーに付与します。

# Running as enterprisedb
psql -p 5444 -U enterprisedb -d pem
CREATE USER pem_agent_common_user;
GRANT pem_agent TO pem_agent_common_user;
  1. エージェントキーを生成します。

# Running as root
openssl genrsa -out agent.key 4096
  1. エージェントのCSRを生成します。

openssl req -new -key agent.key -out agent.csr -subj /C=IN/ST=MH/L=Pune/O=PEM/CN=<agent_user>

-subj は、要件に従って提供されます。

  1. openssl x509 コマンドを使用してCSRに署名し、エージェント証明書を生成します。

openssl x509 -req -days 365 -in agent.csr -CA ca_certificate.crt -CAkey ca_key.key -CAcreateserial -out agent.crt
  1. agent.crt およびagent.key ファイルのアクセス許可を変更します。

chmod 600 agent.crt agent.key
  1. 次のエージェント証明書とキーペアを使用します。

  • 新しいPEMエージェントをリモートホストからPEMサーバーに登録するため。

a.エージェント証明書とキーペアをリモートエージェントホストにコピーし、エージェントを登録します。

export PEM_SERVER_PASSWORD=edb

/usr/edb/pem/agent/bin/pemworker --register-agent \
--pem-server 192.168.99.130 \
--pem-user enterprisedb \
--pem-port 5444 \
--pem-agent-user pem_agent_common_user \
-o agent_ssl_crt= agent.crt \
-o agent_ssl_key= agent.key
  1. pemagentサービスを有効にして開始します。

systemctl enable pemagent
systemctl start pemagent
  • エージェント証明書とキーペアを登録済みのエージェントに置き換えます。 a.エージェントホストのagent.cfg ファイルのagent_user 、agent_ssl_key 、およびagent_ssl_crt パラメーターを編集します。

        vi /usr/edb/pem/agent/etc/agent.cfg
        # Edit the agent username
        agent_user=pem_agent_common_user
        # Edit the ssl parameters with new certificate and key file location
        agent_ssl_key=<new_location>/agent.key
        agent_ssl_crt=<new_location>/agent.crt
``` b. pemagentサービスを再起動します。

```shell
        systemctl restart pemagent

信頼できるCAによって署名された証明書とキーを使用する#

PEM自己署名SSL証明書とキーを、信頼できるCAによって署名された証明書とキーに置き換えます。

信頼できるCA証明書とキーを取得した後、 自己署名サーバーSSL証明書を、信頼できるCAによって署名された証明書に置き換えます。 および 自己署名エージェントSSL証明書を、信頼できるCAによって署名された証明書に置き換えます。 証明書とキーを置き換えます。

自己署名サーバーSSL証明書を、信頼できるCAによって署名された証明書に置き換えます。#

  1. 古いサーバー証明書とキーファイルをバックアップします。

# Running as root
mkdir /var/lib/edb/as<x>/data/certs
cd /var/lib/edb/as<x>/data/
mv server. *root.*  ca_* /var/lib/edb/as<x>/data/certs
  1. サーバーのプライベートキーを生成します。

openssl genrsa -out server.key 4096
  1. サーバーのCSRを生成します。

edb_notranlate_12 -subj は、要件に従って提供されます。 CN には、PEMサーバーホストのホスト名またはドメイン修飾フルネームを使用することをお勧めします。

  1. 信頼できるCAからCA証明書 trusted_ca.crt を取得します。

  2. CAにCSRに署名し、サーバー証明書を生成するように依頼します。

  3. 新しいサーバー証明書の詳細が改ざんされていないことを確認し、指定した詳細と一致することを確認します。

openssl x509 -noout -text -in server.crt
  1. CAから取得した新しい証明書をroot.crt ファイルとして使用します。

cp trusted_ca.crt root.crt
  1. 信頼できるCAがCRLを提供しない場合、サーバーによるCRLの使用を無効にします。 CRLの使用を無効にするには、 postgresql.conf ファイルのssl_crl_file パラメーターをコメント化します。

注釈

誤って以前のCAからのCRLを適切な場所に残し、ssl_crl_file をコメントアウトしない場合、サーバーは起動しますが、認証はSSLエラーメッセージ`tlsv1 alert unknown ca` で失敗します。エラーは、CRLが原因であることを指定していないため、これはコンテキスト外で発生した場合、デバッグが困難になる場合があります。

  1. 新しいroot.crt 、server.key 、およびserver.crt ファイルをバックエンドデータベースサーバーのデータディレクトリにコピーします。

cp root.crt server.key server.crt /var/lib/edb/as<x>/data
  1. 新しい証明書とキーファイルの所有者と権限をデータディレクトリと同じになるように変更します。

edb_notranlate_16 .. Note::

今はPEMサーバーを再起動しないでください。 PEMサーバーを再起動すると、登録されているすべてのエージェントが動作を停止します。

  1. 各PEMエージェントのSSL証明書を、信頼できるCA証明書に置き換えます。詳細については、これらの 自己署名エージェントSSL証明書を、信頼できるCAによって署名された証明書に置き換えます。 を参照してください。

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

  • Linuxの場合

# Running as root
systemctl start edb-as-<x>

バックエンドデータベースサーバーを再起動すると、PEMサーバーが再起動されます。

自己署名エージェントSSL証明書を、信頼できるCAによって署名された証明書に置き換えます。#

自己署名サーバー証明書server.crt およびserver.key およびCA証明書root.crt を置き換えた後にのみ、自己署名エージェントSSL証明書を置き換えます。

  1. psqlを使用して、SSL証明書の置き換えに必要なすべてのエージェント識別子IDを見つけます。

psql -U enterprisedb -d pem --no-psqlrc -t -A -c "SELECT id FROM pem.agent WHERE active=true"
  1. 2.キーファイルを必要とするエージェントを特定した後、各エージェントに対してagent<ID>.key を生成します。

edb_notranlate_19 <ID> はエージェント識別子です。

  1. 各エージェントのCSRを生成します。

edb_notranlate_20 -subj は、要件に応じて提供されます。 CN の<ID> を適切なエージェント識別子に置き換えます。

注釈

エージェントごとに1つではなく、すべてのPEMエージェントに単一の証明書を使用する場合、共通のPostgresユーザーを作成し、 ID の代わりにこのユーザー名を指定します。 共通エージェント証明書とキーペアを生成する を参照してください。

  1. CAにCSRに署名し、エージェント証明書を生成するように依頼します。

  2. 各ホストに証明書とキーファイルをコピーします。ここで、 <ID> は、/usr/edb/pem/agent/etc/agent.cfg ファイルのagent_id と一致します。

  3. 新しいagent<ID>.crt およびagent<ID>.key ファイルの所有権と権限を変更します。

chown root agent<ID>.crt agent<ID>.key
chmod 600 agent<ID>.crt agent<ID>.key
  1. 古いエージェント証明書とキーファイルをバックアップします。

# Running as root
mkdir root/.pem/certs
mv root/.pem/agent<ID>.* root/.pem/certs
  1. 各エージェントの証明書とキーファイルを、新しく生成されたファイルに置き換えます。

cp agent<ID>.key agent<ID>.crt root/.pem
  1. PEMエージェントサービスを再起動します。

  • Linuxの場合

# Running as root
systemctl restart pemagent
  • Windowsの場合 サービスアプレットを使用してPEMエージェントを再起動します。 PEMエージェントサービスの名前はPostgres Enterprise Manager Agentです。 [ Services ]ダイアログボックスでサービス名を選択し、[ Restart the service ]を選択します。

証明書のテスト#

認証の問題が発生した場合は、これらのテストを使用して証明書を検証できます。

ルート証明書と照合して証明書を検証する#

サーバーのroot.crt に従ってPEMエージェント証明書が信頼されるかどうかを確認するには、両方の証明書を同じマシンにコピーします。次に、次のコマンドを実行します。

openssl verify -verbose -CAfile root.crt  agent1.crt

このコマンドは、成功した場合はagent1.crt: OK 、失敗した場合は説明メッセージを返します。

PEMバックエンドデータベースへのテスト接続を作成する#

エージェントユーザーが証明書を使用して接続できるかどうかを確認するには、エージェントが存在するサーバーで、rootとして次のコマンドを実行します。

```shell PGHOST= PGPORT= PGUSER=agent PGSSLCERT=/root/.pem/agent.crt PGSSLKEY=/root/.pem/agent.key PGSSLMODE=require

export PGHOST PGPORT PGUSER PGSSLCERT PGSSLKEY PGSSLMODE

-A -t -c “SELECT version()” ``` ここで

  • <psql_path> は、 psql実行可能ファイル、たとえば /usr/edb/as15/bin/psql へのフルパスです。

  • <pem_host> は、PEMサーバーのホスト名またはIPアドレスです。

  • <pem_db_port> は、PEMバックエンドデータベースサーバーポートです。

  • <ID> は、テストするエージェントのIDです。/usr/edb/pem/agent/etc/agent.cfg ファイルで定義されています。

PGUSER を共通エージェントのユーザー名に設定する必要があります。接続が成功すると、データベースサーバーのPostgresバージョンを結果ます。成功は、証明書が有効で、Postgresユーザーが正しく構成されていることを意味します。