証明書の管理¶
PEMサーバーバッキングデータベースのデータディレクトリに保存されているファイルには、PEMサーバーが安全な接続を利用するのに役立つ情報が含まれています。
ca_certificate.crtca_key.keyserver.crtserver.keyroot.crlroot.crt
PEMサーバーと共にインストールされるPEMエージェントは、 ca_certificate.crt ファイルの有効期限を監視します。証明書の有効期限が切れそうになると、PEMは次のことを行います。
既存の証明書ファイルのバックアップを作成します。
新しい証明書ファイルを作成し、新しいCA証明書ファイルをPEMサーバーのroot.crtファイルに追加します。
アクティブなエージェントの証明書ファイルを更新するジョブを作成します。
PEMサーバーを再起動します。
エージェントをアンインストールすると、そのエージェントに関連付けられた証明書が証明書失効リスト( root.crl ファイルに保持)に追加され、証明書を使用してPEMサーバーに接続できないようになります。
次のセクションには、証明書ファイルを手動で置き換えることに関する詳細情報が含まれています。
SSL証明書の置き換え¶
次の手順では、既存のPEMインストールでのSSL証明書の置換について詳しく説明します。サーバーを同時に新しいバージョンにアップグレードする場合は、SSL証明書を置き換える前に、すべてのPEMインストーラー(最初にサーバーインストーラー、次にエージェントインストーラー)を呼び出します。次に:
実行中のすべてのPEMエージェントを、最初にサーバーホストで、次に監視対象ノードで停止します。
LinuxホストでPEMエージェントを停止するには、ターミナルウィンドウを開き、スーパーユーザー権限を引き受けて、次のコマンドを入力します。
Linuxでinit.dを使用する場合(例:Centos6)
/etc/init.d/pemagent stopLinuxでsystemdを使用している場合(例:Centos7)
systemctl stop pemagentWindowsホストでは、
Servicesアプレットを使用してPEMエージェントを停止できます。PEMエージェントサービスの名前はPostgresEnterpriseManagerAgentです。Servicesダイアログでサービス名を強調表示し、Stop the serviceをクリックします。既存のSSLキーと証明書のバックアップを取ります。SSLキーと証明書は、PEMインストールの下の
dataディレクトリに保存されます。たとえば、Linuxシステムのデフォルトの場所は次のとおりです。/var/lib/pgsql/x/dataここでxはPostgreSQLデータベースのバージョンです。次のファイルのコピーを作成し、各ファイルに拡張子を追加して名前を一意にします。
ca_certificate.crtca_key.keyroot.crtroot.crlserver.keyserver.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.keyAfter creating the
ca_key.keyfile,catthe contents to the variableCA_KEYfor use when generating theca_certificate.crtfile and modify the privileges on theca_key.keyfile:CA_KEY=$(cat /var/lib/pgsql/x/data/ca_key.key)chmod 600 /var/lib/pgsql/x/data/ca_key.keyキーを使用して
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.crtca_certificate.crtファイルの権限を変更し、SQLコマンドを含む一時ファイルを削除します。chmod 600 /var/lib/pgsql/x/data/ca_certificate.crtrm -f /tmp/_random.$$ca_certificate.crtファイルをroot.crtファイルとして再利用します:cp /var/lib/pgsql/x/data/ca_certificate.crt /var/lib/pgsql/x/data/root.crtroot.crtファイルのパーミッションを変更します:chmod 600 /var/lib/pgsql/x/data/root.crtopenssl_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.crlroot.crlファイルのパーミッションを変更します:chmod 600 /var/lib/pgsql/x/data/root.crlopenssl_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.keyAfter creating the
server.keyfile,catthe contents to the variableSSL_KEYfor use when generating theserver.crtfile and modify the privileges on theserver.keyfile:SSL_KEY=$(cat /var/lib/pgsql/x/data/server.key)chmod 600 /var/lib/pgsql/x/data/server.keySSL_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.crtserver.crtファイルの特権を変更し、一時ファイルを削除します。chmod 600 /var/lib/pgsql/x/data/server.crtrm -f /tmp/_random.$$Postgresサーバーを再起動します。
Linuxでinit.dを使用する場合(例:Centos6)
/etc/init.d/postgresql-x restartLinuxでsystemdを使用している場合(例:Centos7)
systemctl restart postgresql-x
エージェントSSL証明書の更新¶
PEMサーバーと対話するエージェントごとに、以下を行う必要があります。
rsaキーと証明書を生成します。
キーと証明書をエージェントにコピーします。
エージェントを再起動します。
各エージェントには、 pem データベースの pem.agent テーブルに保存される一意の識別子があります。キーと証明書のファイルを、エージェントの識別子に対応するキーまたは証明書に置き換える必要があります。次のキーファイルペアを生成する前に、 agent.key および agent.crt ファイル(ステップ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/agent32ビットWindowsインストールでは、次を確認します。
HKEY_LOCAL_MACHINE/SOFTWARE/EnterpriseDB/PEM/agent
キーファイルを必要とするエージェントを特定した後、各エージェントに対して
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
各エージェントの証明書を生成します。証明書を生成するには、次のコマンドを実行して、出力を証明書ファイルにキャプチャします。
/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.crtPEMエージェントサービスを再起動する前に、各エージェントのキーと証明書ファイルを新しく生成されたファイルで置き換えます。
init.dを使用するLinuxでは、次のコマンドを使用してサービスを再起動します。
/etc/init.d/pemagent startsystemdを使用するLinuxでは、次のコマンドを使用してサービスを再起動します。
systemctl start pemagentOn a Windows host, you can use the Services applet to start the PEM agent. The PEM agent service is named
Postgres Enterprise ManagerAgent; highlight the service name in the Services dialog, and clickStart the service.