Managing Certificates¶
PEMサーバーバッキングデータベースのデータディレクトリに保存されているファイルには、PEMサーバーが安全な接続を利用するのに役立つ情報が含まれています。
ca_certificate.crtca_key.keyserver.crtserver.keyroot.crlroot.crt
PEMサーバーと共にインストールされるPEMエージェントは、ca_certificate.crtファイルの有効期限を監視します。証明書の有効期限が間もなくエキスパイアと、PEMは次のことを行います。
既存の証明書ファイルのバックアップを作成します。
新しい証明書ファイルを作成し、新しいCA証明書ファイルをPEMサーバーのルート.crtファイルに追加します。
アクティブなエージェントの証明書ファイルを更新するジョブを作成します。
PEMサーバーを再起動します。
エージェントをアンインストールすると、そのエージェントに関連付けられた証明書が証明書失効リスト(root.crlファイルに保持され保証)に追加され、証明書を使用してPEMサーバーに接続できないようになります。
以下のセクションには、証明書ファイルの手動置換に関する詳細情報が含まれています。
SSL証明書の置き換え¶
次の手順では、既存のPEMインストールのSSL証明書の置換について詳しく説明します。サーバーを新しいバージョンに同時にアップグレードする予定がある場合は、SSL証明書を置き換える前に、すべてのPEMインストーラー(最初にサーバーインストーラ、次にエージェントインストーラー)を呼び出します。次に:
1.実行中のすべてのPEMエージェントを、最初にサーバホストで、次に監視対象ノードで停止します。
LinuxホストでPEMエージェントを停止するには、ターミナルウィンドウを開き、スーパーユーザ権限を引き受けて、次のコマンドを入力します。
systemdを使用するLinuxの場合、たとえば:Centos 7または8
* systemctl stop pemagent
Windowsホストでは、Servicesアプレットを使用してPEMエージェントを停止できます。
PEMエージェントサービスの名前付けはPostgres Enterprise Manager
Agentです。
Servicesダイアログでサービス名前を強調表示し、Stop the serviceをクリックします。
2.既存のSSLキーと証明書のバックアップを取ります。
SSLキーと証明書は、PEMインストールのdataディレクトリに保存されます。例、Linuxシステムのデフォルトの場所は次のとおりです。
/var/lib/pgsql/x/dataここで、xはPostgreSQLデータベースバージョンです。次のファイルのコピーを作成し、名前を一意にmakeに各ファイルに拡張子を追加します。
-
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ファイルのバックアップを作成します。
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ファイルを生成し、ca_key.keyファイルの特権を変更するときに使用する変数CA_KEYの内容をcatしファイル。
* 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.$$
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
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
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ファイルを生成し、server.keyファイルの特権を変更するときに使用する変数SSL_KEYの内容をcatしファイル。
* SSL_KEY=$(cat /var/lib/pgsql/x/data/server.key)
* chmod 600 /var/lib/pgsql/x/data/server.key
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
server.crtファイルの特権を変更し、一時ファイルを削除します。
* chmod 600 /var/lib/pgsql/x/data/server.crt
* rm -f /tmp/_random.$$
Postgresサーバーを再起動します。
Linuxで`init.d`を使用する場合;例、Centos6ホストの場合:
* /etc/init.d/postgresql-x restart
Linuxで
systemdを使用する場合;例、Centos7ホストの場合:
* systemctl restart postgresql-x
エージェントSSL証明書の更新¶
PEMサーバーと対話するエージェントごとに、以下を行う必要があります。
rsaキーと証明書を生成します。
キーと証明書をエージェントにコピーします。
エージェントをリスタートします。
各エージェントには、pemデータベースのpem.agentテーブルに格納されている一意の識別子があります。キーと証明書ファイルを、エージェントの識別子に対応するキーまたは証明書に置き換える必要があります。次のキーファイルペアを生成する前に、agent.keyおよびノートファイル(手順2および3で生成されたファイルをそれぞれのPEMエージェントホストの所定の場所に移動する必要があります。後続のコマンドは以前に生成されたファイルを上書きします)
PEMエージェントキーファイルペアを生成するには:
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
-32ビットWindowsインストールでは、次を確認します。
* HKEY_LOCAL_MACHINE\SOFTWARE\EnterpriseDB\PEM\agent
2.キーファイルを必要とするエージェントを特定した後、各エージェントに対してagent.keyを生成します。
キーを生成するには、次のコマンドを実行して、出力をファイルにキャプチャします:
* /usr/pgsql-x/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
3.各エージェントの証明書を生成します。証明書を生成するには、次のコマンドを実行して、証明書ファイルに出力をキャプチャします。
* /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コマンドラインから取得)。
agent.crtファイルの特権を変更します。
* chmod 600 agent.crt
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をクリックします。