TLS 証明書

bob-ide および bob-shell クライアントが安全に接続できるように、IBM Bob オンプレミスの外部 TLS 証明書を設定します。

Bob は HTTPS を通じて API を公開しています。bob-ide または bob-shell を使用してユーザーが接続する前に、エンドポイント証明書がクライアントワークステーションに信頼されている必要があります。

ヒント:

可能な限り、エンタープライズまたは公開信頼された証明書局が発行した証明書を使用してください。これにより、Bob 固有の CA 証明書を開発者ワークステーションに配布する必要がなくなります。

デフォルトの自己署名証明書にいつでも戻すには、bobctl reset-route を実行してください。これにより Bob 証明書リポジトリから spec.externalCertificate が削除され、オペレーターは外部エンドポイントを cert-manager に戻します。

企業 PKI または公開信頼された証明書局からの証明書が利用可能な場合にこのアプローチを使用します。

証明書をリクエストまたは生成する前に、Bob が公開するすべてのホスト名を特定してください。証明書の Subject Alternative Names (SAN) にすべてのホスト名を含める必要があります。

ingress ホスト名の取得

すべての Bob ingress ホスト名をリストするには、以下のコマンドを実行します。

oc get ingress -n <instance-namespace> \
  -o jsonpath='{range .items[*]}{range .spec.rules[*]}{.host}{"\n"}{end}{end}'

返されたホスト名を記録します — 証明書の注文または生成時に必要です。

証明書要件の確認

Bob に適用する前に証明書が以下の要件を満たしていることを確認します。

  • 秘密鍵が暗号化されていないこと。
  • 証明書に完全な証明書チェーンが含まれていること。
  • すべての Bob ingress ホスト名が SAN エントリとして含まれていること。
  • 証明書とキーが PEM 形式で提供されていること。

証明書シークレットの作成

証明書と秘密鍵を含む Kubernetes シークレットを作成します。

oc create secret generic my-tls-secret \
  --from-file=tls.crt=tls.crt \
  --from-file=tls.key=tls.key \
  --from-file=ca.crt=ca.crt \
  -n <instance-namespace>

既存のシークレットを更新するには:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=tls.crt \
  --from-file=tls.key=tls.key \
  --from-file=ca.crt=ca.crt \
  -n <instance-namespace> \
  --dry-run=client -o yaml | oc apply -f -

証明書の適用

Bob が証明書を使用するように設定します。

./bobctl setup-route --tls-secret my-tls-secret
パラメーター説明
--tls-secret証明書と秘密鍵を含むシークレットを指定します。
--no-wait調整を待たずにすぐに返します。
--dry-run変更を適用せずに設定を検証します。

証明書の確認

期待される証明書が提供されていることを確認します。

echo | openssl s_client \
  -connect <hostname>:443 \
  -servername <hostname> 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

以下を確認します。

  • 発行者が正しいこと。
  • ホスト名が SAN リストに含まれていること。
  • 証明書の有効期限が正しいこと。

プライベートまたは内部証明書局によって署名された証明書を生成し、Bob が外部 HTTPS トラフィックに使用するように設定するにはこの手順を使用します。

CA 証明書の生成

証明書局の秘密鍵と自己署名証明書を生成します。

openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes \
  -key ca.key \
  -sha256 \
  -days 365 \
  -out ca.crt \
  -subj "/CN=<BOB_HOSTNAME> CA"

これにより ca.key と ca.crt が作成されます。

注意:

Bob は Kubernetes シークレットに含まれる CA 証明書のファイル名が ca.crt であることを期待します。既存の CA 証明書を使用する場合は、シークレットを作成する前に ca.crt にリネームしてください。

サーバー秘密鍵の生成

Bob エンドポイント証明書用の暗号化されていない秘密鍵を生成します。

openssl genrsa -out tls.key 4096

秘密鍵がパスフレーズで暗号化されている場合は、続行する前にパスフレーズを削除してください。

openssl rsa -in encrypted.key -out tls.key

SAN 設定ファイルの作成

san.cnf という名前のファイルを作成し、プレースホルダーホスト名を以前に取得した ingress ホスト名に置き換えます。

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = <BOB_HOSTNAME_1>

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = <BOB_HOSTNAME_1>
DNS.2 = <BOB_HOSTNAME_2>
DNS.3 = <BOB_HOSTNAME_3>

すべての Bob ingress ホスト名が含まれるように DNS.* エントリを追加または削除してください。

証明書署名要求の生成

openssl req \
  -new \
  -key tls.key \
  -out tls.csr \
  -config san.cnf

証明書への署名

openssl x509 \
  -req \
  -in tls.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -out tls.crt \
  -days 365 \
  -extensions v3_req \
  -extfile san.cnf

TLS シークレットの作成

プライベートまたは企業証明書局が発行した証明書の場合:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=/path/to/tls.crt \
  --from-file=tls.key=/path/to/tls.key \
  --from-file=ca.crt=/path/to/ca.crt \
  -n <instance-namespace>

公開信頼された証明書の場合:

oc create secret tls my-tls-secret \
  --cert=/path/to/tls.crt \
  --key=/path/to/tls.key \
  -n <instance-namespace>

証明書の適用

Bob が TLS シークレットを使用するように設定します。

./bobctl setup-route --tls-secret my-tls-secret

bobctl はシークレットを検証し、Bob の設定を更新して調整が完了するまで待機します。

パラメーター説明
--tls-secret <secret>TLS 証明書と秘密鍵を含むシークレットを指定します。
--no-wait調整完了を待たずにすぐに返します。
--dry-run変更を適用せずに設定を検証します。
注意:

ca.crt がシークレットに含まれていない場合、bobctl は警告を表示します。これは証明書がクライアントワークステーションに既に信頼されている証明書局によって発行されている場合に予想される動作です。

証明書の確認

Bob が期待される証明書を提供していることを確認します。

echo | openssl s_client \
  -connect <BOB_HOSTNAME_1>:443 \
  -servername <BOB_HOSTNAME_1> 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

以下を確認します。

  • 発行者が期待される証明書局と一致していること。
  • 証明書に期待されるホスト名エントリが含まれていること。
  • 証明書の有効期限が正しいこと。

発行証明書局が開発者ワークステーションに信頼されていない場合は、ユーザーが bob-ide または bob-shell を使用して Bob に接続する前に CA 証明書をユーザーに配布してください。

外部証明書が設定されていない場合、Bob は cert-manager が管理する自己署名証明書を使用します。この設定では、ユーザーは接続する前に Bob CA 証明書を信頼する必要があります。

証明書設定の確認

Bob 外部エンドポイントが自己署名証明書を使用しているかどうかを確認します。

oc get secret bob-external-tls -n <instance-namespace> \
  -o jsonpath='{.data.tls\.crt}' \
  | base64 -d \
  | openssl x509 -noout -issuer
  • 発行者が CN=Bob Internal CA の場合、クラスターはデフォルトの自己署名証明書を使用しています。次のステップに進んでください。
  • 発行者がエンタープライズまたは公開信頼された証明書局の場合、クライアント側の証明書設定は不要です。ユーザー管理を参照してください。

CA 証明書のエクスポート

./bobctl get-ca-cert --output bob-ca.crt

CA 証明書の配布

エクスポートした bob-ca.crt をユーザーに提供し、オペレーティングシステムの信頼ストアに追加するよう指示してください。ユーザーは Bob CA 証明書をインポートした後、信頼された HTTPS 接続を確立できます。

このトピックはいかがですか?