ページの先頭行へ戻る
Enterprise Postgres 15 オペレーターユーザーズガイド

4.7.1 証明書を手動で管理する方法

作業の概要

MTLS通信を有効にする手順を以下に示します。

  1. CAとして自己署名証明書を作成します

  2. CA証明書を保存するためのConfigmapを作成します

  3. FEPサーバの秘密鍵を保護するためのパスワードを作成します(オプション)

  4. FEPサーバの秘密鍵を作成します

  5. FEPサーバ証明書署名要求を作成します

  6. CAによって署名されたFEPサーバ証明書を作成します

  7. FEPサーバの証明書とキーを保存するためのTLSシークレットを作成します

  8. Patroniの秘密鍵を作成します

  9. Patroniの証明書署名要求を作成します

  10. Patroni用にCAによって署名された証明書を作成します

  11. Patroni証明書とキーを保存するためのTLSシークレットを作成します

  12. “postgres”ユーザーのクライアント証明書の秘密鍵を作成します

  13. “postgres”ユーザーのクライアント証明書の証明書署名要求を作成します

  14. “postgres”ユーザーのクライアント証明書を作成します

  15. “postgres”証明書とキーを保存するためのTLSシークレットを作成します

  16. “repluser”と“rewinduser”に対して手順12-15を繰り返します

注意

  • マニュアルに記載されている情報は一例であり、動作時には、ユーザーが信頼できる認証局 (CA) によって署名された証明書を使用してください。

  • Kubernetesクラスタ上で操作する場合は、ocコマンドをkubectlコマンドに読み替えてください。


CA証明書の作成

1. CAとして自己署名証明書を作成します
openssl genrsa -aes256 -out myca.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes) ........................++++ ........................................................++++ e is 65537 (0x010001) Enter pass phrase for myca.key: 0okm9ijn8uhb7ygv Verifying - Enter pass phrase for myca.key: 0okm9ijn8uhb7ygv cat << EOF > ca.cnf
[req]

distinguished_name=req_distinguished_name

x509_extensions=v3_ca

[v3_ca]

basicConstraints = critical, CA:true

keyUsage=critical,keyCertSign,digitalSignature,cRLSign

[req_distinguished_name]

commonName=Common Name

EOF


openssl req -x509 -new -nodes -key myca.key -days 3650 -out myca.pem -subj "/O=My Organization/OU=CA
/CN=My Organization Certificate Authority" -config ca.cnf Enter pass phrase for myca.key: 0okm9ijn8uhb7ygv

2. CA証明書を保存するためのConfigmapを作成します
oc create configmap cacert --from-file=ca.crt=myca.pem -n my-namespace

3. FEPサーバの秘密鍵を保護するためのパスワードを作成します(オプション)
oc create secret generic mydb-fep-private-key-password --from-literal=keypassword=abcdefghijk -n my-namespace

サーバ証明書の作成

4. FEPサーバの秘密鍵を作成します
openssl genrsa -aes256 -out fep.key 2048
Generating RSA private key, 2048 bit long modulus ................................................+++ .......+++ e is 65537 (0x10001) Enter pass phrase for fep.key: abcdefghijk Verifying - Enter pass phrase for fep.key: abcdefghijk

5. FEPサーバ証明書署名要求を作成します
cat << EOF > san.cnf
[SAN]

subjectAltName = @alt_names

[alt_names]

DNS.1 = *.my-namespace.pod

DNS.2 = *.my-namespace.pod.cluster.local

DNS.3 = mydb-primary-svc

DNS.4 = mydb-primary-svc.my-namespace

DNS.5 = mydb-primary-svc.my-namespace.svc

DNS.6 = mydb-primary-svc.my-namespace.svc.cluster.local

DNS.7 = mydb-replica-svc

DNS.8 = mydb-replica-svc.my-namespace

DNS.9 = mydb-replica-svc.my-namespace.svc

DNS.10 = mydb-replica-svc.my-namespace.svc.cluster.local

EOF


$ openssl req -new -key fep.key -out fep.csr -subj "/CN=mydb-headless-svc" -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(cat san.cnf))

Enter pass phrase for fep.key: abcdefghijk

注意

  • クラスタ名と名前空間を適切に変更する必要があります。

  • OCPクラスタの外部から接続する場合は、その接続に使用するホスト名も含める必要があります。


6. CAによって署名されたFEPサーバ証明書を作成します
openssl x509 -req -in fep.csr -CA myca.pem -CAkey myca.key -out fep.pem -days 365 -extfile <(cat /etc/pki/tls/openssl.cnf <(cat san.cnf)) -extensions SAN -CAcreateserial  # all in one line
Signature ok
subject=/CN=mydb-headless-svc
Getting CA Private Key
Enter pass phrase for myca.key: 0okm9ijn8uhb7ygv

7. FEPサーバの証明書とキーを保存するためのTLSシークレットを作成します
oc create secret generic mydb-fep-cert --from-file=tls.crt=fep.pem --from-file=tls.key=fep.key -n my-namespace

8. Patroniの秘密鍵を作成します

現時点では、FEPコンテナはPatroniのパスワードで保護された秘密鍵をサポートしていません。

openssl genrsa -out patroni.key 2048
Generating RSA private key, 2048 bit long modulus ...............................................+++ .......+++ e is 65537 (0x10001)

9. Patroniの証明書署名要求を作成します
cat << EOF > san.cnf
[SAN]

subjectAltName = @alt_names

[alt_names]

DNS.1 = *.my-namespace.pod

DNS.2 = *.my-namespace.pod.cluster.local

DNS.3 = mydb-primary-svc

DNS.4 = mydb-primary-svc.my-namespace

DNS.5 = mydb-replica-svc

DNS.6 = mydb-replica-svc.my-namespace

DNS.7 = mydb-headless-svc

DNS.8 = mydb-headless-svc.my-namespace

EOF


openssl req -new -key patroni.key -out patroni.csr -subj "/CN=mydb-headless-svc" -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(cat san.cnf)) # all in one line


10. Patroni用にCAによって署名された証明書を作成します
openssl x509 -req -in patroni.csr -CA myca.pem -CAkey myca.key -out patroni.pem -days 365 -extfile <(cat /etc/pki/tls/openssl.cnf <(cat san.cnf)) -extensions SAN -CAcreateserial  # all in one line
Signature ok subject=/CN=mydb-headless-svc Getting CA Private Key Enter pass phrase for myca.key: 0okm9ijn8uhb7ygv

11. Patroni証明書とキーを保存するためのTLSシークレットを作成します
oc create secret tls mydb-patroni-cert --cert=patroni.pem --key=patroni.key -n my-namespace

ユーザー証明書の作成

12. postgresユーザーのクライアント証明書の秘密鍵を作成します

現時点では、FEPサーバコンテナ内のSQLクライアントはパスワードで保護された証明書をサポートしていません。

openssl genrsa -out postgres.key 2048
Generating RSA private key, 2048 bit long modulus ...............................................+++ .......+++ e is 65537 (0x10001)

13. postgresユーザーのクライアント証明書の証明書署名要求を作成します
openssl req -new -key postgres.key -out postgres.csr -subj "/CN=postgres"

14. postgresユーザーのクライアント証明書を作成します
$ openssl x509 -req -in postgres.csr -CA myca.pem -CAkey myca.key -out postgres.pem -days 365
Signature ok

subject=CN = postgres

Getting CA Private Key

Enter pass phrase for myca.key: 0okm9ijn8uhb7ygv


15. postgres証明書とキーを保存するためのTLSシークレットを作成します
oc create secret tls mydb-postgres-cert --cert=postgres.pem --key=postgres.key -n my-namespace

16. repluserとrewinduserに対して手順12-15を繰り返します