Generating SSL files for HA PEM backend hosts
=============================================

このページでは、 HA
PEMバックエンドのSSLファイルを生成する方法について説明します。
SSLモデルの選択については、 :ref:`Deciding on an SSL model <Deciding on an SSL model>` を参照してください。

外部CAを使用する場合
--------------------

!!!注

SSL対応のPostgresクラスターをプロビジョニングする既存のプロセスがある場合、これらの条件は既に満たされている可能性があります。
この場合、それ以上のアクションは必要ありません。

.. ::
   独自の証明書を使用している場合、各バックエンドPostgresインスタンスのサーバー証明書とキーを生成します。ローカルインスタンスの証明書とキー、およびCAのパブリック証明書を、各バックエンドホストのPGDATAに配置します。

後続のインストール手順では、これらのファイルがそれぞれ\ ``server.crt``
、\ ``server.key`` 、および\ ``root.crt``
と呼ばれることを前提としています。これらの名前を使用する必要はありませんが、
Postgres構成が正しいファイル名を参照していることを確認する必要があります。

ここで使用されるCAは、PEMエージェントのクライアント証明書の署名に使用したものと同じであることが重要です。それ以外の場合、\ ``cert``
認証は失敗します。

オプションで、証明書失効リストCRLが利用可能な場合は、それを含めることができます。

これらのファイルが\ ``postgres`` または\ ``enterprisedb``
ユーザーとグループが所有していること、および権限が\ ``0600``
に設定されていることを確認します。

sslutilsを使用する場合
----------------------

HA展開では、PEMは、クラスターマネージャーとの衝突を回避するためにクラスターを構成または再起動しません。したがって、sslutilsは手動で構成する必要があります。

!!!注 これらの手順は\ ``postgres`` または\ ``enterprisedb``
ユーザーとして実行して、ファイルの所有権が正しいことを確認します。

1. 認証局として機能するときにsslutilsが使用する単一の証明書とキーペアを生成します。これらを各バックエンドホストのPGDATAに配置します。

.. code:: sh

       openssl genrsa -out ca_key.key 4096

       openssl req -x509 -new -nodes -key ca_key.key -sha256 -days 3650 \
       -out ca_certificate.crt \
       -subj "/C=.../ST=.../L=.../O=.../CN=PEM CA"

1. 各バックエンドホストで、\ ``ca_certificate.crt``
   のコピーを作成し、\ ``root.crt``
   という名前を付けます。これもPGDATAに保存する必要があります。

2. 各バックエンドホストで、サーバーキーを生成し、CAによって署名されたサーバー証明書を生成します。クライアント接続に\ ``verify-full``
   SSLモードを使用する予定がある場合、共通名がサーバーのDNS名と一致することが重要です。

.. code:: sh

       openssl genrsa -out server.key 4096

       openssl req -new -key server.key -out server.csr \
           -subj "/C=.../ST=.../L=.../O=.../CN=..."

       openssl x509 -req -in server.csr -CA ca_certificate.crt -CAkey ca_key.key \
           -CAcreateserial -out server.crt -days 3650 -sha256

1. キーファイルと証明書ファイルのアクセス許可を設定し、CSRを削除します。

.. code:: sh

       chmod 0600 ca_certificate.crt
       chmod 0600 ca_key.key
       chmod 0600 root.crt
       chmod 0600 server.crt
       chmod 0600 server.key
       rm server.csr

ローカルCAを使用する場合
------------------------

sslutilsを使用したくないが、組織のCAがない場合は、PEMホストまたは他の場所でローカルCAを手動で構成し、それを使用してPEMサーバーとエージェントの証明書を発行できます。

..  Note::
   Postgresクラスターがプロビジョニング中にSSLを使用するように既に構成されている場合、次の手順に従って、既存のSSL証明書とキーをローカルCAによって署名されたものに置き換えて、Postgresがクライアント証明書を検証できることを確認する必要があります。その逆も可能です。

1. CAをホストするマシンで、単一の証明書とキーペアを生成します。これがCA証明書とキーになります。

.. code:: sh

       openssl genrsa -out ca_key.key 4096

       openssl req -x509 -new -nodes -key ca_key.key -sha256 -days 3650 \
       -out ca_certificate.crt \
       -subj "/C=.../ST=.../L=.../O=.../CN=PEM CA"

..  Important::
   ローカルCAキーと証明書を安全に保ちます。PEMエージェントのクライアント証明書を生成するために必要です。 !!!

1. 各PEMバックエンドホストで、サーバーキーを生成し、証明書署名要求CSRを生成します。クライアント接続に\ ``verify-full``
   SSLモードを使用する予定がある場合、共通名がサーバーのDNS名と一致することが重要です。

.. code:: sh

       openssl genrsa -out server.key 4096

       openssl req -new -key server.key -out server.csr \
           -subj "/C=.../ST=.../L=.../O=.../CN=..."

1. 各CSRをローカルCAホストにコピーし、それを使用してサーバー証明書を生成します。

.. code:: sh

       openssl x509 -req -in server.csr -CA ca_certificate.crt -CAkey ca_key.key \
           -CAcreateserial -out server.crt -days 3650 -sha256

必要に応じて、PEMホストからCSRを削除できます。

1. 生成された各サーバー証明書を、そのCSRが発生したPEMホストにコピーします。サーバー証明書とサーバーキーの両方をPGDATAに配置します。

2. ローカルCAパブリック証明書 ``ca_certificate.crt``
   を各PEMホストにコピーしてPGDATAに配置し、 ``root.crt``
   に名前を変更します

3. 3つのファイルすべてがPostgres OSユーザー\ ``postgres``
   または\ ``enterprisedb``
   と同じ名前のグループが所有していることを確認します。

.. code:: sh

       chown <user>:<group> root.crt
       chown <user>:<group> server.crt
       chown <user>:<group> server.key
       rm server.csr

1. キーファイルと証明書ファイルのアクセス許可を設定します。

.. code:: sh

       chmod 0600 root.crt
       chmod 0600 server.crt
       chmod 0600 server.key
